这是一个有点奇怪的请求,但我正在寻找一种方法来写一个列表到文件,然后再读一遍。Python 2.7 - 从文件中读取和读取一个列表
我无法重新制作列表,以便它们按照下面的示例正确地形成/格式化。
我的列表有类似如下的数据:
test
data
here
this
is one
group :)
test
data
here
this
is another
group :)
这是一个有点奇怪的请求,但我正在寻找一种方法来写一个列表到文件,然后再读一遍。Python 2.7 - 从文件中读取和读取一个列表
我无法重新制作列表,以便它们按照下面的示例正确地形成/格式化。
我的列表有类似如下的数据:
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字符串,而不是字节串,你会想要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的3.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
。
只要你的文件有一致的格式(即换行符),这很容易,只需基本的文件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
希望这适合你在找什么。
+1。如果我们谈论的数据不是很复杂,恕我直言,最好是在这个答案中推出自己的解析器。 – brokenfoot
我喜欢咸菜库,这是非常甜蜜的,完美的作品。我已经实现了它,它似乎工作正常。 谢谢,只要它允许,我会立即将您标记为绿色勾号。 – Ryflex
unicode-escape ...由于TypeError,我必须打开它为'wb':必须是str,而不是字节 – rluks
@Pan.student:您使用的是Python 3.x,对不对?在Python 2中,这是这个问题提出的问题,'str'和'bytes'是相同的类型,二进制文件和文本文件之间的区别仅仅是换行。在Python 3中,'str'和'unicode'是相同的类型,二进制文件和文本文件的区别在于文本文件会自动为您编码和解码。 (如果你小心的话,如果是2.x,你可以得到类似3.x的行为,包括带有'io.open'的3.x-style文本文件,但提问者没有这样做。) – abarnert