リストを文字列に変換してテキスト ファイルに保存しています。リストを読むと、次のような文字列が表示されます。
"['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]"
それをリストに戻す簡単な方法があるかどうか疑問に思っていました。それが不可能な場合、それを保存して元に戻すためのより良い方法があれば?
ありがとう!
(私はPython 2.6で作業しています)
確かにもっと良い方法がありますが、最も顕著なのはpickle
モジュールです。
import cPickle as pickle
# Saving
with open("a.file", "w") as f:
pickle.dump([1, 2, "Hello!"], f)
# Reading
with open("a.file") as f:
obj = pickle.load(f)
json
Python のモジュールと比較して、cPickle
より柔軟です。一方、JSON は人間が判読できるファイルを提供します。cPickle
信頼できないデータでは使用できないため、オブジェクトをシリアル化できる場合は JSON を使用してください。
編集:問題はやや未定であるため、パフォーマンスに関するコメントを削除しました。 ms4py によるこのミニ ベンチマークjson
は、少なくとも一部のオブジェクトでは高速であることを示唆しています。
を見てくださいast.literal_eval
。それはあなたが望むことをするべきです。
>>> import ast
>>> sss="['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]"
>>> ast.literal_eval(sss)
['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]
これは ( とは異なりeval
) 悪意のあるコードから完全に安全である必要がありますが、読み取ることができるオブジェクトは単純なオブジェクト (文字列、整数、浮動小数点数、None およびブール値、または完全に文字列、整数、浮動小数点数で構成されるリスト/タプル/辞書) である必要があります。 、なしおよびブール値)。
もちろん、人間が読めるデータファイルが必要ない場合は、他の回答で提案されているpickle
かを確認する必要があります。json
編集
json
人間にとって非常に読みやすい (以下のコメントを参照) ことに気が付いたので、おそらくそれを使用する必要があります。
あなたが使用することができますjson
:
In [1]: import json
In [2]: mylist = [1, 2, 3]
In [3]: with open('data', 'w') as fobj:
...: json.dump(mylist, fobj)
...:
In [4]: with open('data') as fobj:
...: l = json.load(fobj)
...:
In [5]: l
Out[5]: [1, 2, 3]