从文件中写入和读取列表

时间:2013-06-20 23:05:20

标签: python file list python-2.7 save

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

我无法重新制作列表,以便正确形成/格式化,如下例所示。

我的列表包含以下数据:

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)

3 个答案:

答案 0 :(得分:99)

如果您不需要它是人类可读/可编辑的,最简单的解决方案就是使用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字符串而不是字节字符串,那么您需要encode他们。 (或者,更糟糕的是,如果它们是字节字符串,但不一定与系统默认字符串相同。)

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

让我们一起使用unicode-escape来解决上述两个问题:

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样式的解决方案,使用codecs模块或io模块:*

import io

with io.open(the_filename, 'w', encoding='unicode-escape') as f:
    f.writelines(line + u'\n' for line in my_list)

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

* TOOWTDI,这是一个显而易见的方法吗?这取决于...对于简短版本:如果您需要在2.6之前使用Python版本,请使用codecs;如果没有,请使用io

答案 1 :(得分:13)

只要您的文件具有一致的格式(即换行符),只需基本的文件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

希望这符合您的需求。

答案 2 :(得分:1)

让我们先定义一个列表:

lst=[1,2,3]

您可以直接将列表写到文件中

f=open("filename.txt","w")
f.write(str(lst))
f.close()

要首先从文本文件中读取列表,请先读取文件并将其存储在变量中:

f=open("filename.txt","r")
lst=f.read()
f.close()

变量lst的类型当然是字符串。您可以使用eval函数将此字符串转换为数组。

lst=eval(lst)