0

リストを文字列に変換してテキスト ファイルに保存しています。リストを読むと、次のような文字列が表示されます。

"['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]"

それをリストに戻す簡単な方法があるかどうか疑問に思っていました。それが不可能な場合、それを保存して元に戻すためのより良い方法があれば?

ありがとう!

(私はPython 2.6で作業しています)

4

3 に答える 3

8

確かにもっと良い方法がありますが、最も顕著なのは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)

jsonPython のモジュールと比較して、cPickleより柔軟です。一方、JSON は人間が判読できるファイルを提供します。cPickle信頼できないデータでは使用できないため、オブジェクトをシリアル化できる場合は JSON を使用してください。

編集:問題はやや未定であるため、パフォーマンスに関するコメントを削除しました。 ms4py によるこのミニ ベンチマークjsonは、少なくとも一部のオブジェクトでは高速であることを示唆しています。

于 2012-07-17T13:25:11.010 に答える
6

を見てください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人間にとって非常に読みやすい (以下のコメントを参照) ことに気が付いたので、おそらくそれを使用する必要があります。

于 2012-07-17T13:24:28.123 に答える
4

あなたが使用することができます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]
于 2012-07-17T13:26:46.030 に答える