将元组列表保存到文件中,然后将其作为列表再次读取



好的,我有这个元组列表:

[(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。

最新更新