1

次のリスト内包表記によって生成されたタプルのリストがあるとします。

foo = [(x**2, x*2) for x in xrange(10)]

私がそれから書くなら

print foo

次のような出力が得られます。

[(0, 0), (1, 2), (4, 4), (9, 6), (16, 8), (25, 10), (36, 12), (49, 14), (64, 16), (81, 18)]

以前にこの出力を file に書き込んでいて、この出力をfoo.txt再びタプルのリストとして Python に読み込みたいとします。これはおもちゃの例であることに注意してください。これは明らかにリスト内包表記を書き直すことができるためですが、実際の使用例では、タプルの元のリストを生成するためにコストのかかる計算を行ったので、計算を繰り返さないでください。

正規表現またはその他の標準的な文字列解析方法を使用して手動で解析せずにこれを行う方法はありますか?

4

2 に答える 2

7

あなたが探しているast.literal_eval()

import ast
with open('foo.txt', 'r') as myfile:
    fileoutput = myfile.read() # Assuming the whole file is just the list

original = ast.literal_eval(fileoutput)
for i in original:
    print i

版画:

(0, 0)
(1, 2)
(4, 4)
(9, 6)
(16, 8)
(25, 10)
(36, 12)
(49, 14)
(64, 16)
(81, 18)
于 2013-06-09T05:37:46.010 に答える
7

ピクルスを使用できます。

ファイルに保存するには、次のようにします。

with open('dump.txt','w') as f:
    pickle.dump(object,f)

オブジェクトをロードして戻すには、次のようにします。

with open('dump.txt') as f:
    object = pickle.load(f)

単純なオブジェクトのみを実行している場合、Haidro の回答は適切ですが、より複雑なオブジェクトには pickle を使用する必要があります。

于 2013-06-09T05:42:02.840 に答える