我如何写一个列表文件?writelines()不插入换行符,所以我需要这样做:

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

当前回答

在一般情况下

下面是writelines()方法的语法

fileObject.writelines( sequence )

例子

#!/usr/bin/python

# Open a file
fo = 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 file
fo.close()

参考

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

其他回答

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

问题中的例子使用方括号来创建一个临时列表,因此相当于:

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

这将不必要地构造一个包含所有将被写入的行的临时列表,这可能会消耗大量的内存,这取决于列表的大小以及str(item)的输出有多详细。

去掉方括号(相当于去掉上面的包装列表()调用)将会传递一个临时生成器给file.writelines():

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

该生成器将按需创建以换行符结束的项目对象表示(即当它们被写入时)。这很好,有几个原因:

内存开销很小,即使对于非常大的列表也是如此 如果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

(我通过限制Python的max触发了此错误。使用ulimit -v 102400虚拟内存到~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.2 on Linux)

使用Python 3和Python 2.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-string替换:f"{item}\n"。

你打算怎么处理这个文件?这个文件是否存在于人类,或其他具有明确互操作性要求的程序?

如果您只是试图将列表序列化到磁盘,以便稍后由同一python应用程序使用,则应该pickle该列表。

import pickle

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

再读一遍:

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)
with open ("test.txt","w")as fp:
   for line in list12:
       fp.write(line+"\n")

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

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()