Writing a list to a file with Python
因为
1 2 | file.writelines(["%s " % item for item in list]) |
似乎有一个标准的方法…
可以使用循环:
1 2 3 4 | with open('your_file.txt', 'w') as f: for item in my_list: f.write("%s " % item) |
在Python2中,还可以使用
1 2 3 | with open('your_file.txt', 'w') as f: for item in my_list: print >> thefile, item |
如果您热衷于单个函数调用,那么至少要删除方括号
你打算怎么处理这个文件?此文件是否存在于人类或其他具有明确互操作性要求的程序中?
如果您只是想将一个列表序列化到磁盘以供同一个python应用程序以后使用,那么应该对该列表进行pickling。
1 2 3 4 | import pickle with open('outfile', 'wb') as fp: pickle.dump(itemlist, fp) |
要读回:
1 2 | with open ('outfile', 'rb') as fp: itemlist = pickle.load(fp) |
最好的方法是:
1 2 | outfile.write(" ".join(itemlist)) |
另一种方式。使用simplejson(在python 2.6中作为json包含)序列化到json:
1 2 3 4 | >>> import simplejson >>> f = open('output.txt', 'w') >>> simplejson.dump([1,2,3,4], f) >>> f.close() |
如果检查output.txt:
[1, 2, 3, 4]
这是有用的,因为语法是Python式的,它是人类可读的,并且可以被其他语言的程序读取。
使用python 3和python 2.6+语法:
1 2 3 4 | with open(filepath, 'w') as file_handler: for item in the_list: file_handler.write("{} ".format(item)) |
这是平台独立的。它还使用换行符终止最后一行,这是一种UNIX最佳实践。
我认为探索使用genexp的好处会很有趣,下面是我的看法。
问题中的示例使用方括号创建临时列表,因此相当于:
1 2 | file.writelines( list("%s " % item for item in list ) ) |
它不必要地构建一个临时列表,其中包含所有要写出的行,这可能会消耗大量的内存,具体取决于列表的大小以及
去掉方括号(相当于去掉上面的包装
1 2 | file.writelines("%s " % item for item in list ) |
此生成器将按需创建
- 内存开销很小,即使对于非常大的列表也是如此
- 如果
str(item) 速度较慢,则在处理每个项目时,文件中都有可见的进度。
这样可以避免内存问题,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | In [1]: import os In [2]: f = file(os.devnull,"w") In [3]: %timeit f.writelines("%s " % item for item in xrange(2**20) ) 1 loops, best of 3: 385 ms per loop In [4]: %timeit f.writelines( ["%s " % 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 |
(我使用
把内存使用放在一边,这个方法实际上并不比原来的快:
1 2 3 4 5 6 7 | In [4]: %timeit f.writelines("%s " % item for item in xrange(2**20) ) 1 loops, best of 3: 370 ms per loop In [5]: %timeit f.writelines( ["%s " % item for item in xrange(2**20)] ) 1 loops, best of 3: 360 ms per loop |
(Linux上的python 2.6.2)
用逗号分隔值将列表序列化为文本文件
1 2 3 | mylist = dir() with open('filename.txt','w') as f: f.write( ','.join( mylist ) ) |
因为我懒惰……
1 2 3 4 5 6 7 8 | 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()) |
一般来说
下面是writeLines()方法的语法
1 | fileObject.writelines( sequence ) |
例子
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/python # Open a file fo = open("foo.txt","rw+") seq = ["This is 6th line ","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
1 2 | file.write(' '.join(list)) |
1 2 3 4 | with open ("test.txt","w")as fp: for line in list12: fp.write(line+" ") |
如果您在python3上,也可以使用print函数,如下所示。
1 2 | f = open("myfile.txt","wb") print(mylist, file=f) |
你为什么不试试呢
1 | file.write(str(list)) |
此逻辑首先将列表中的项转换为
1 2 | alist = [(i12,tiger), (113,lion)] |
这个逻辑将写入一个新行中的每个元组。以后我们可以在读取文件时加载每个元组时使用
1 2 3 4 5 | outfile = open('outfile.txt', 'w') # open a file in write mode for item in list_to_persistence: # iterate over the list items outfile.write(str(item) + ' ') # write to the file outfile.close() # close the file |
另一种迭代和添加换行符的方法:
1 2 3 | for item in items: filewriter.write(f"{item}" +" ") |
让avg作为列表,然后:
1 2 3 | In [29]: a = n.array((avg)) In [31]: a.tofile('avgpoints.dat',sep=' ',dtype = '%f') |
您可以根据需要使用
1 2 3 4 5 6 7 8 9 | 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 |
它是如何工作的:首先,打开一个?使用内置的open函数并指定这个?Le和要打开的模式?乐。模式可以是读模式("R")、写模式("W")或附加模式("A")。我们也可以指定无论我们是以文本模式("t")还是二进制模式读、写或附加模式("B")。实际上还有更多可用的模式和帮助(打开)会给你更多的细节。默认情况下,open()考虑?勒托做一个"T"字?以"读取"模式打开。在我们的例子中,我们?打开?在写入文本模式下使用方法?要写入的对象?我们呢?Nally关闭?乐。
上面的例子来自swaroop c h的《Python的一个字节》一书。SuroopCH.com