好的,我有这个元组列表:
[(0, 'Paper 1.jpg'), (1, 'Paper 2.jpg'), (2, 'Paper 3.jpg'), (0, 'Paper 4.jpg'), (1, 'Paper 5.jpg'), (2, 'Paper 6.jpg'), (0, 'Paper 7.jpg'), (1, 'Paper 8.jpg')]
基本上,我只想将这个列表保存到.txt文件或.json文件中,然后在其他地方读取。
问题是,当我把它保存为.txt文件时;当我尝试阅读它时,Python将其作为字符串。我无法将这个元组列表字符串转换为其原始状态。
或者,当我将其写入.json文件时,json不知道元组是什么,并将列表中的所有元组保存为列表,所以我得到了一个嵌套列表,这破坏了整个目的。
有人能帮我吗?
我从未使用过.xml文件,也许我应该将此列表保存在.xml文件中?
始终使用JSON:
import json
lst = [(0, 'Paper 1.jpg'), (1, 'Paper 2.jpg'), (2, 'Paper 3.jpg'), (0, 'Paper 4.jpg'), (1, 'Paper 5.jpg'),
(2, 'Paper 6.jpg'), (0, 'Paper 7.jpg'), (1, 'Paper 8.jpg')]
# save as json
with open('data.json', 'w') as f:
json.dump(lst,f)
# read the file
with open('data.json') as f:
lst1 = [tuple(x) for x in json.load(f)]
print(f'lst1: {lst1}')
输出
lst1: [(0, 'Paper 1.jpg'), (1, 'Paper 2.jpg'), (2, 'Paper 3.jpg'), (0, 'Paper 4.jpg'), (1, 'Paper 5.jpg'), (2, 'Paper 6.jpg'), (0, 'Paper 7.jpg'), (1, 'Paper 8.jpg')]
您是否考虑过只对方法1得到的字符串调用eval
?
您可以使用json.dump
将列表正确加载到json对象中,然后将其写入文件(请参阅json模块文档(。
幸运的是,有一种替代JSON的方法:PyYAML!它能够存储仅在Python中存在的数据类型,包括元组。(PyYAML的完整文档在这里。(
字符串化元组列表:
import pyyaml
x = [(1, 2), (2, 3)]
print(yaml.dump(x))
将生成以下内容:
- !!python/tuple
- 1
- 2
-!!python/tuple
- 2
- 3
如果您想将YAML字符串转换为Python对象,请使用yaml.load()
:
x = """
- !!python/tuple
- 1
- 2
-!!python/tuple
- 2
- 3
"""
print(yaml.load(x))
将产生CCD_ 4。