我有一個虛擬機讀取從元組嵌套在一個列表中,像這樣的指令:轉換列表爲字符串,並回
[(0,4738),(0,36),
(0,6376),(0,0)]
當存儲這種機器代碼程序,文本文件是最簡單的,並且必須寫成一個字符串。這顯然很難轉換回來。
是否有任何模塊可以讀取字符串到列表中/以可讀的方式存儲列表?
要求:
- 必須是人類可讀的存儲形式(因此 「鹹菜」 不適合)
- 必須是相對容易實現
我有一個虛擬機讀取從元組嵌套在一個列表中,像這樣的指令:轉換列表爲字符串,並回
[(0,4738),(0,36),
(0,6376),(0,0)]
當存儲這種機器代碼程序,文本文件是最簡單的,並且必須寫成一個字符串。這顯然很難轉換回來。
是否有任何模塊可以讀取字符串到列表中/以可讀的方式存儲列表?
要求:
import json
with open(data_file, 'wb') as dump:
dump.write(json.dumps(arbitrary_data))
和類似:
source = open(data_file, 'rb').read()
data = json.loads(source)
使用json
module:
string = json.dumps(lst)
lst = json.loads(string)
演示:
>>> import json
>>> lst = [(0,4738),(0,36),
... (0,6376),(0,0)]
>>> string = json.dumps(lst)
>>> string
'[[0, 4738], [0, 36], [0, 6376], [0, 0]]'
>>> lst = json.loads(string)
>>> lst
[[0, 4738], [0, 36], [0, 6376], [0, 0]]
另一種方法是使用repr()
和ast.literal_eval()
;只是列表,元組和整數這也可以讓你往返:
>>> from ast import literal_eval
>>> string = repr(lst)
>>> string
'[[0, 4738], [0, 36], [0, 6376], [0, 0]]'
>>> lst = literal_eval(string)
>>> lst
[[0, 4738], [0, 36], [0, 6376], [0, 0]]
JSON有一個好處,它是一個標準的格式,從工具支持Python支持串行化之外,分析和驗證。該庫的功能也比ast.literal_eval()
功能快得多。
只需使用ast.literal_eval
>>> from ast import literal_eval
>>> a = literal_eval('[(1, 2)]')
>>> a
[(1, 2)]
你可以把它轉換成使用repr()
的字符串。
>>> repr(a)
'[(1, 2)]'
當我要慢! – Serial
如果這些都只是兩元組,你可以將它們使用csv
module存儲在一個CVS文件。不需要任何括號/括號。
with open('path/to/file', 'w') as outfile:
for tup in L:
outfile.write("%s\n" %' '.join(str(i) for i in tup))
with open('path/to/file) as infile:
L = [tuple(int(i) for i in line.strip().split()) for line in infile]
如果你只是處理原始的Python類型,你可以使用內置的repr()
:
Help on built-in function repr in module __builtin__:
repr(...)
repr(object) -> string
Return the canonical string representation of the object.
For most object types, eval(repr(object)) == object.
eval
應該做一個簡單的方法:
>>> str([(0,4738),(0,36),(0,6376),(0,0)])
'[(0, 4738), (0, 36), (0, 6376), (0, 0)]'
>>> eval(str([(0,4738),(0,36),(0,6376),(0,0)]))
[(0, 4738), (0, 36), (0, 6376), (0, 0)]
+1鏈接到文檔,謝謝! –