Python 从文件中写入和读取列表

Python 从文件中写入和读取列表,python,file,list,python-2.7,save,Python,File,List,Python 2.7,Save,这是一个有点奇怪的请求,但我正在寻找一种方法,将列表写入文件,然后在其他时间将其读回 我无法重新制作列表,以使其正确形成/格式,如下面的示例所示 我的列表包含如下数据: test data here this is one group :) test data here this is another group :) 如果您不需要它是人类可读/可编辑的,最简单的解决方案就是使用pickle 写: with open(the_filename, 'wb') as f: pickle.

这是一个有点奇怪的请求,但我正在寻找一种方法,将列表写入文件,然后在其他时间将其读回

我无法重新制作列表,以使其正确形成/格式,如下面的示例所示

我的列表包含如下数据:

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)

如果您不需要它是人类可读/可编辑的,最简单的解决方案就是使用
pickle

写:

with open(the_filename, 'wb') as f:
    pickle.dump(my_list, f)
全文如下:

with open(the_filename, 'rb') as f:
    my_list = pickle.load(f)

如果你真的需要他们是人类可读的,我们需要更多的信息

如果
my_list
保证是一个没有嵌入换行符的字符串列表,只需每行写一个:

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write(s + '\n')

with open(the_filename, 'r') as f:
    my_list = [line.rstrip('\n') for line in f]

如果它们是Unicode字符串而不是字节字符串,则需要对它们进行编码。(或者,更糟糕的是,如果它们是字节字符串,但不一定与系统默认的编码相同。)

如果它们可能有换行符或不可打印字符等,则可以使用转义或引用。Python在stdlib中内置了各种不同类型的转义

让我们在这里使用
unicode转义
来同时解决上述两个问题:

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write((s + u'\n').encode('unicode-escape'))

with open(the_filename, 'r') as f:
    my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f]

您还可以将2.x中的3.x样式解决方案用于模块或模块:*


*TOOWTDI,那么哪一个是最明显的方法?这取决于……对于短版本:如果需要使用2.6之前的Python版本,请使用
编解码器
;如果没有,请使用
io

,只要文件具有一致的格式(即换行符),只需进行基本的文件io和字符串操作即可:

with open('my_file.txt', 'rU') as in_file:
    data = in_file.read().split('\n')
将数据文件存储为项目列表,每行一个。然后,要将其放入文件中,您可以执行相反的操作:

with open('new_file.txt', 'w') as out_file:
    out_file.write('\n'.join(data)) # This will create a string with all of the items in data separated by new-line characters

希望这符合您的要求。

让我们先定义一个列表:

lst=[1,2,3]
您可以直接将列表写入文件:

f=open(“filename.txt”,“w”)
f、 写入(str(lst))
f、 关闭()
要从文本文件中读取列表,请首先读取文件并存储在变量中:

f=open("filename.txt","r")
lst=f.read()
f.close()
变量
lst
的类型当然是字符串。您可以使用
eval
函数将此字符串转换为数组

lst=eval(lst)

我喜欢pickle库,它非常甜美,效果非常好。我已经实现了它,它似乎工作正常。谢谢你,我会尽快把你标记为绿色记号。unicode escape。。。因为TypeError,我不得不以“wb”的形式打开它:必须是str,而不是strbytes@Pan.student:您正在使用Python 3.x,对吗?在Python2中,也就是这个问题所要问的,
str
bytes
是相同的类型,二进制文件和文本文件之间的区别只是换行翻译。在Python3中,
str
unicode
是相同的类型,二进制文件和文本文件之间的区别在于文本文件会自动为您编码和解码。(如果你小心的话,如果2.x,你可以得到类似3.x的行为,包括带有
io.open
的3.x样式的文本文件,但是询问者没有这样做。)@Pan.student:在3.x中,你最好使用
open(文件名,'w',encoding='unicode-escape')
并让file对象为你编码。(您可以在2.x中使用
io.open
codecs
模块执行相同的操作,但我认为显式编码可以更容易地查看2.x中发生的情况,其中字节和文本混合的危险要高得多。)使用Python 2.7上的第二个选项,而不是多行,它保存一行,中间有纯文本
\n
。将
f.write((s+u'\n').encode('unicode-escape'))
更改为
f.write(s.encode('unicode-escape')+u'\n')
修复了它。+1。如果我们正在讨论的
数据不复杂,那么最好在ans中使用您自己的解析器。这正是我所需要的。谢谢
f=open("filename.txt","r")
lst=f.read()
f.close()