質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.53%

Pythonで読み込んだファイルの文字列に行ごとに文字を振り当てる方法

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 146
退会済みユーザー

退会済みユーザー

Pythonで読み込んだファイルの行ごとに文字を割り振りたいです.
例としてtxtファイル
123
456
7890
のような3行の文字列があったとすると,
a = 123
b = 456
c = 7890
という風に行ごとに任意の文字を割り振っていきたいです.
ご回答よろしくお願いいたします.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2020/03/26 15:32

    「文字を割り振る」という操作は一般的な表現ではなく、どういったことを実現したいのか現時点の質問内容では伝わらないかと思います。もう少し詳しい説明が必要です。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2020/03/26 15:57

    試行錯誤を行うほどの知識がないため,
    実際行ったことはreadを用いて読み込むことしかできず,
    その際はすべての文字列を読み込んでしまいました.
    割り振った後は数値計算を行いと思っています.
    そのため上記の例では,a = 123, b = 456
    としたのちに
    a + b = 579
    のような処理を行いたいです.

    キャンセル

  • shiracamus

    2020/03/27 02:11 編集

    a + b = 579 と処理を書くと文法エラーになりますよ。
    print("a + b = 579") と表示したいのですか?
    各行をリストにして、一つの変数に代入しておくのが一般的です。

    キャンセル

回答 3

checkベストアンサー

0

Python には、辞書(dict) があるので、文字列と数値の組を作るのは
簡単ですが、文字列の生成をどうするかですね。

def ch(n): return chr(ord('a') + n)

def id(n):
    m = 26
    if n < m: return ch(n)
    n -= m
    return ch(n // m) + ch(n % m)

if __name__ == '__main__':
    mem = {}
    with open("data.txt") as f:
        lines = f.readlines()
        k = 0
        for line in lines:
            val = int(line)
            mem[id(k)] = val
            k += 1

    for k in mem.keys():
        print(k, "=", mem[k])
    print()
    print("a + b =", mem['a'] + mem['b'])


2文字までの文字列は生成できますが、それ以上はダメな例です。

data.txt

123
456
7890


実行結果

a = 123
b = 456
c = 7890

a + b = 579


これを参考にあなたのプログラムは書けそうですか?

追記
質問を読み違えていたような気がします。次の仕様でよろしいでしょうか?
・ファイルの行が文字列で、それは数値に変換して後で計算に使う。
・その数値は a から z までの 1文字に割り振る。
それなら簡単です。

mem = {}
with open("data.txt") as f:
    lines = f.readlines()
    c = 'a'
    for line in lines:
        mem[c] = int(line)
        if c == 'z': break
        c = chr(ord(c) + 1)

for k in mem.keys():
    print(k, "=", mem[k])
print()
print("a + b =", mem['a'] + mem['b'])

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

各行をリストにして一つの変数に代入しておき、処理するのが一般的です。 

with open('data.txt') as f:
    data = [int(line) for line in f]

print(data[0] + data[1])

data.txt:

123
456
7890

実行結果:

579

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

import re

with open('data.txt') as f:
    Current, Voltage, Speed = [int(re.sub('[^0-9].*', '', s)) for s in f]

print(Current + Voltage);


ファイルの行数が 3行より多い場合は、
Current, Voltage, Speed = [int(re.sub('[^0-9].*', '', s)) for s in f][:3]
として、先頭の 3行だけを使うようにしてください。

問題が解決したら、黙って逃げ出すのではなく、回答にコメントを書いてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる