在Python中编写和读取文件中的列表

时间:2016-03-24 17:19:58

标签: python

我想将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

我该如何解决这个问题? 感谢

5 个答案:

答案 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)