我想将python中的列表保存到一个文件中,该文件应该能够稍后读取并在以后的使用中添加到列表变量中。
作为一个例子
list = [42,54,24,65]
这应该作为
写入文件[42,54,24,65] or
list = [42,54,24,65]
应该能够稍后从python中读取以供以后使用并将其分配给列表变量
现在我正在使用以下代码。
f = open('list_file', 'w')
f.write(values)
f.close()
这给了我一个错误
TypeError: write() argument must be str, not list
我该如何解决这个问题? 感谢
答案 0 :(得分:1)
如果您只有一个简单的列表,那么您可以使用JSON和json
模块。
import json
data = [42,54,24,65]
with open('output.txt', 'w') as f_out:
json.dump(data, f_out)
with open('output.txt', 'r') as f_in:
data2 = json.load(f_in)
print(data2) # [42,54,24,65]
output.txt
的内容看似
[42,54,24,65]
答案 1 :(得分:1)
您也可以使用pickle
执行此操作,它与json的工作方式类似,但它可以序列化比json更广泛的Python对象集。 Json序列化文本,并且是人类可读的,而pickle序列化字节,而不是人类可读。
考虑这个例子:
import pickle, json
list_ = [42,54,24,65]
with open('list_file.pickle', 'wb') as fp, open('list_file.json', 'w') as fj:
pickle.dump(list_, fp)
json.dump(list_, fj)
with open('list_file.pickle', 'rb') as fp, open('list_file.json', 'r') as fj:
list_unpickled = pickle.load(fp)
list_from_json = json.load(fj)
print(list_unpickled) #[42, 54, 24, 65]
print(list_from_json) #[42, 54, 24, 65]
请注意,使用pickle,您必须使用'b'打开文件以进行二进制读/写。
附注:请勿使用与python关键字同名的变量,例如list
。
根据文件中的12.1.4:
可以腌制以下类型:
- 无,真,假
- 整数,浮点数,复数
- 字符串,字节,字节数组
- 仅包含可选对象的元组,列表,集和词典
- 在模块顶层定义的函数(使用def,而不是lambda)
- 在模块顶层定义的内置函数
- 在模块顶层定义的类
- 此类的实例 dict 或调用 getstate ()的结果是可挑选的(有关详细信息,请参阅“修补类实例”一节)。
答案 2 :(得分:0)
首先将列表中的所有值映射到字符串,write
方法仅支持字符串。
例如。 list = list(map(str, list))
同时调用变量" list"是一种不好的做法,使用像" ls"或者与标准Python关键字有什么不同。如果以后要使用它,可以使用空格分隔值。就像f.write(" ".join(list))
一样写。然后,要将其重新读回列表,请执行list = f.readline().split()
但是,这会将列表中的值保留为字符串,以便将它们恢复为整数,再次映射为list = list(map(int, list))
答案 3 :(得分:0)
根据代码中的错误,将列表传递给f.write()。您需要传递字符串。
我假设您想要每行写一个单词。它下面的代码应该有效。
f = open('list_file', 'w')
for value in list:
f.write(value+"\n")
f.close()
要稍后阅读,您可以再次打开文件并使用以下代码阅读:
f = open('list_file', 'r')
for line in f:
print line.strip()
f.close()
答案 4 :(得分:0)
将我的评论转化为答案:
尝试Saving and loading objects and using pickle:
import pickle
filehandler = open(b"Fruits.obj","wb")
pickle.dump(banana,filehandler)
要加载数据,请使用:
file = open("Fruits.obj",'r')
object_file = pickle.load(file)