1

わかりましたので、次のようなタプルの txt ファイルがあります。

("Item1", 2, 3, 4)
("Item2", 3, 4, 5)
("Item3", 4, 5, 6)

各タプルは独自の行に設定され、アイテム 0 が文字列で、他の 3 が数字である場合とまったく同じです。今、私が問題を抱えている部分について。基本的には、タプルを読み込んでリストに追加したい。これが私が思いついたものです:

with open('data.txt', 'r', encoding='utf-8') as file:
     lst = [line.strip() for line in file]

各項目をリストに追加します。ただし、各項目は処理中に文字列に変換されます。タプル値だけを取得するにはどうすればよいですか。

4

2 に答える 2

4

使用できますast.literal_eval()

import ast
with open('data.txt', 'r', encoding='utf-8') as file:
    lst = [ast.literal_eval(line.strip()) for line in file]

これにより、文字列がタプルに安全に評価されます。を使用するよりも安全ですeval()


pickleまた、このようなデータの書き込みと読み取りにモジュールを使用することを検討することもできます。次に例を示します。

import pickle
with open('a.txt', 'w') as myfile:
    pickle.dump([("Item1", 2, 3, 4), ("Item2", 3, 4, 5), ("Item3", 4, 5, 6)], myfile)

with open('a.txt', 'rb') as myfile2: # Open in bytes
    lst = pickle.load(myfile2)
    for tup2 in lst:
        print tup2
于 2013-09-15T22:17:45.977 に答える
0

正規表現を使用しますか?

def main():
    filename = sys.argv[1]
    fp = open(filename, 'r') # TODO error handling
    text = fp.read()
    fp.close()

    matches = re.findall(r'\(\"([^"]+)\",\s+(\d+),\s+(\d+),\s+(\d+)\)', text)
    for match in matches:
        (itemname, num1, num2, num3) = match
        print itemname, num1, num2, num3
        # Do whatever you want with them
于 2013-09-15T23:22:12.280 に答える