用Python写一个列表到一个文件

这是最清洁的方式写一个列表文件,因为writelines()不插入换行符?

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

看来会有一个标准的方式…

编辑从托马斯的评论添加信息

不要忘记先打开文件

thefile = open('test.txt', 'w')

我会使用一个循环:

 for item in thelist: thefile.write("%s\n" % item) 

要么:

 for item in thelist: print>>thefile, item 

如果你热衷于单一的函数调用,至少要删除方括号[]以便一次打印一个字符串(一个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) 

最好的方法是:

 outfile.write("\n".join(itemlist)) 

另一种方式。 使用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,它是人类可读的,并且可以被其他语言的其他程序读取。

使用Python 3Python 2.6+语法:

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

这是平台无关的。 它也以一个换行符终止最后一行,这是UNIX的最佳实践 。

我认为这将是有趣的探索使用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 

(Linux上的Python 2.6.2)

一般来说

以下是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

用逗号分隔值将列表序列化为文本文件

 mylist = dir() with open('filename.txt','w') as f: f.write( ','.join( mylist ) ) 
 file.write('\n'.join(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) 

因为我很懒….

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

你为什么不尝试

 file.write(str(list)) 

让平均成为名单,然后:

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

您可以根据您的要求使用%e%s

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

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

上面的例子来自Swaroop C H. swaroopch.com 的书“Python的一个字节”