使用Python将列表写入文件,使用换行符

如何将列表写入文件?writelines()不插入换行符,所以我需要执行:

f.writelines([f"{line}\n" for line in lines])
2128090 次浏览

更简单的是:

with open("outfile", "w") as outfile:outfile.write("\n".join(itemlist))

要确保项目列表中的所有项目都是字符串,请使用生成器表达式:

with open("outfile", "w") as outfile:outfile.write("\n".join(str(item) for item in itemlist))

请记住,itemlist占用内存,因此请注意内存消耗。

使用循环:

with open('your_file.txt', 'w') as f:for line in lines:f.write(f"{line}\n")

对于Python<3.6:

with open('your_file.txt', 'w') as f:for line in lines:f.write("%s\n" % line)

对于Python 2,也可以使用:

with open('your_file.txt', 'w') as f:for line in lines:print >> f, line

如果您热衷于单个函数调用,至少去掉方括号[],以便一次打印一个字符串(genexp而不是listcomp)——没有理由占用物化整个字符串列表所需的所有内存。

您将如何处理该文件?此文件是否适用于人类或其他具有明确互操作性要求的程序?

如果您只是尝试将列表序列化到磁盘以供同一python应用程序稍后使用,您应该是列表的酸洗

import pickle
with open('outfile', 'wb') as fp:pickle.dump(itemlist, fp)

再读一遍:

with open ('outfile', 'rb') as fp:itemlist = pickle.load(fp)

还有另一种方式。使用simplejson序列化为json(在python 2.6中包含为json):

>>> import simplejson>>> f = open('output.txt', 'w')>>> simplejson.dump([1,2,3,4], f)>>> f.close()

如果你检查output.txt:

[1、2、3、4]

这很有用,因为语法是pythonic的,它是人类可读的,并且可以被其他语言的其他程序读取。

file.write('\n'.join(list))

我认为探索使用genexp的好处会很有趣,所以这是我的看法。

问题中的示例使用方括号创建临时列表,因此等效于:

file.writelines( list( "%s\n" % item for item in list ) )

这不必要地构造了一个将被写入的所有行的临时列表,这可能会消耗大量的内存,具体取决于列表的大小以及str(item)的输出的冗长程度。

删除方括号(相当于删除上面的包装list()调用)将改为传递临时发生器file.writelines()

file.writelines( "%s\n" % item for item in list )

这个生成器将按需创建item对象的换行符终止表示(即当它们被写出来时)。这很好,有几个原因:

  • 内存开销很小,即使对于非常大的列表也是如此
  • 如果str(item)很慢,则在处理每个项目时文件中会有可见的进度

这避免了内存问题,例如:

In [1]: import os
In [2]: f = file(os.devnull, "w")
In [3]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )1 loops, best of 3: 385 ms per loop
In [4]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )ERROR: Internal Python error in the inspect module.Below is the traceback from this internal error.
Traceback (most recent call last):...MemoryError

(我通过使用ulimit -v 102400将Python的最大虚拟内存限制为~100MB来触发此错误)。

将内存使用放在一边,这种方法实际上并不比原始方法快:

In [4]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )1 loops, best of 3: 370 ms per loop
In [5]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )1 loops, best of 3: 360 ms per loop

Python 2.6.2Linux

假设avg是列表,则:

In [29]: a = n.array((avg))In [31]: a.tofile('avgpoints.dat',sep='\n',dtype = '%f')

您可以根据需要使用%e%s

使用python3python2.6+语法:

with open(filepath, 'w') as file_handler:for item in the_list:file_handler.write("{}\n".format(item))

这与平台无关。它还以换行符结束最后一行,换行符是UNIX最佳实践

从Python 3.6开始,"{}\n".format(item)可以替换为f字符串:f"{item}\n"

一般而言

以下是写行()方法的语法

fileObject.writelines( sequence )

示例

#!/usr/bin/python
# Open a filefo = open("foo.txt", "rw+")seq = ["This is 6th line\n", "This is 7th line"]
# Write sequence of lines at the end of the file.line = fo.writelines( seq )
# Close opend filefo.close()

参考

http://www.tutorialspoint.com/python/file_writelines.htm

poem = '''\Programming is funWhen the work is doneif you wanna make your work also fun:use Python!'''f = open('poem.txt', 'w') # open for 'w'ritingf.write(poem) # write text to filef.close() # close the file

它是如何工作的:首先,通过使用内置的open函数并指定文件的名称来打开文件文件和我们想要打开文件的模式。模式可以是读模式('r')、写模式('w')或追加模式('a')。我们还可以指定无论我们是以文本模式('t')还是二进制读取、写入或追加模式('b')。实际上还有更多可用的模式和帮助(打开)会给你更多关于它们的细节。默认情况下,open()将文件视为是一个't'extfile并以'r'ead模式打开它。在我们的示例中,我们首先以写文本模式打开文件并使用写文件对象写入文件的方法,然后我们最终关闭文件。

上面的例子来自Swaroop C H的《A Byte of Python》一书。swaroopch.com

你为什么不试试

file.write(str(list))
with open ("test.txt","w")as fp:for line in list12:fp.write(line+"\n")

如果你使用python3,你也可以使用print函数,如下所示。

f = open("myfile.txt","wb")print(mylist, file=f)

将列表序列化为带有逗号分隔值的文本文件

mylist = dir()with open('filename.txt','w') as f:f.write( ','.join( mylist ) )

因为我懒惰……

import jsona = [1,2,3]with open('test.txt', 'w') as f:f.write(json.dumps(a))
#Now read the file back into a Python list objectwith open('test.txt', 'r') as f:a = json.loads(f.read())

另一种迭代和添加换行符的方法:

for item in items:filewriter.write(f"{item}" + "\n")

此逻辑将首先将列表中的项目转换为string(str)。有时列表包含一个元组,例如

alist = [(i12,tiger),(113,lion)]

此逻辑将在新行中写入文件中的每个元组。稍后我们可以在读取文件时加载每个元组时使用eval

outfile = open('outfile.txt', 'w') # open a file in write modefor item in list_to_persistence:    # iterate over the list itemsoutfile.write(str(item) + '\n') # write to the fileoutfile.close()   # close the file

python3中,您可以使用此循环

with open('your_file.txt', 'w') as f:for item in list:f.print("", item)

在Python 3中,您可以使用print*进行参数解包:

with open("fout.txt", "w") as fout:print(*my_list, sep="\n", file=fout)

使用numpy.savetxt也是一种选择:

import numpy as np
np.savetxt('list.txt', list, delimiter="\n", fmt="%s")

将标准输出重定向到文件也可能对此有用:

from contextlib import redirect_stdoutwith open('test.txt', 'w') as f:with redirect_stdout(f):for i in range(mylst.size):print(mylst[i])

您还可以通过以下方式:

示例:

my_list=[1,2,3,4,5,"abc","def"]with open('your_file.txt', 'w') as file:for item in my_list:file.write("%s\n" % item)

输出:

your_file.txt中,项目保存为:

1
2
3
4
5
abc
def

您的脚本也如上所述保存。

否则,你可以用泡菜

import picklemy_list=[1,2,3,4,5,"abc","def"]#to writewith open('your_file.txt', 'wb') as file:pickle.dump(my_list, file)#to readwith open ('your_file.txt', 'rb') as file:Outlist = pickle.load(file)print(Outlist)

输出:[1,2,3,4,5,'abc','def']

它保存转储列表相同的列表,当我们加载它,我们能够读取。

也由simplejson可能与上述输出相同

import simplejson as sjmy_list=[1,2,3,4,5,"abc","def"]#To writewith open('your_file.txt', 'w') as file:sj.dump(my_list, file)
#To savewith open('your_file.txt', 'r') as file:mlist=sj.load(file)print(mlist)

我建议这个解决方案。

with open('your_file.txt', 'w') as f:list(map(lambda item : f.write("%s\n" % item),my_list))

我最近发现Path很有用。帮助我解决必须with open('file') as f然后写入文件的问题。希望这对某人有用:)。

from pathlib import Pathimport jsona = [[1,2,3],[4,5,6]]# writePath("file.json").write_text(json.dumps(a))# readjson.loads(Path("file.json").read_text())

我想你正在寻找这样的答案。

f = open('output.txt','w')list = [3, 15.2123, 118.3432, 98.2276, 118.0043]f.write('a= {:>3d}, b= {:>8.4f}, c= {:>8.4f}, d= {:>8.4f}, e={:>8.4f}\n'.format(*list))f.close()

简单地说:

with open("text.txt", 'w') as file:file.write('\n'.join(yourList))