我正在尝试将列表保存到文件中,当我加载并再次读取文件时,我会按原样获取列表。换句话说,保存和加载时数据类型不会更改。因为现在,我使用“write”将我的列表保存到文件中,当我尝试将其加载回内存时,我得到字符串而不是真实列表。有没有办法在加载后将它们转换回列表?或者我应该改变将列表保存到文件中的方式。请注意,我不想使用Pickle。 谢谢 编辑:我的问题是我必须在代码的不同部分逐步添加我的列表。因此,我没有一次列出所有列表所以我可以腌制它们。这就是我遇到的问题。它给了我错误的答案,我想这是因为pickle需要一个地方的所有信息并立即将它们添加到文件中。 (?) 我的名单中只有整数。
答案 0 :(得分:4)
如果您的数据只是一个列表,其项目是基本类型(例如str,unicode,int,float)以及其元素等等的列表或词组,那么您可以使用json;这是可以跨语言移植的(这是你的问题吗?)。
问题编辑后的更新“”“我的问题是,我必须在代码的不同部分逐步添加我的列表”“”
您是否考虑过收集清单以便在找到它们时进行腌制,然后在最后一次腌制所有这些清单?同样适用于json等所有你需要的是一个容器来保存你的列表。你可以通过将它放在一个类中来使它看起来更好。
class Preserver(object):
def __init__(self):
self._bottle = []
def add(self, an_object):
self._bottle.append(an_object)
def preserve(self, filepath):
# code using pickle or json to push self._bottle
# out to a file named "filepath"
答案 1 :(得分:1)
如果您信任输入,请使用读取文件并使用eval:
>>> a_list = [1, 3, 5]
>>> with open('test.txt', 'w') as f:
... f.write(str(a_list))
...
>>> with open('test.txt') as f:
... read_list = eval(f.readlines()[0])
...
>>> read_list
[1, 3, 5]
您还可以使用 ast.literal_eval (python 2.6+),这比我的eval
建议更安全。
来自文档:
安全地评估表达式节点或 包含Python的字符串 表达。字符串或节点 提供的可能只包括 遵循Python文字结构: 字符串,数字,元组,列表, dicts,booleans和None。
这可用于安全评估 包含Python表达式的字符串 来自不受信任的来源,没有 需要自己解析价值观。
例如:
>>> import ast
>>> a_list = [1, 3, 5]
>>> with open('test.txt', 'w') as f:
... f.write(repr(a_list))
...
>>> with open('test.txt') as f:
... read_list = ast.literal_eval(f.readlines()[0])
...
>>> read_list
[1, 3, 5]
答案 2 :(得分:0)
你应该尝试pyyaml额外奖励它是真正的人类可读文本文件。