![](/img/trans.png)
[英]How to get read strings from a list(a txt file) and print them out as ints, strings, and floats?
[英]How to write a list of strings and ints to file efficiently
我有一个列表,其中包含字符串和整数的列表,例如:
l = [['+1', 12, 13, 14], ['+1', 13, 14, 15]]
我需要将此列表写入文件,每个子列表都放在单独的行中。
我这样做是这样的:
f.writelines(['%s ' % item for item in l])
工作正常。 但是,我正在使用的列表很大,因此此代码运行非常缓慢。 有更快的选择吗?
您是否已经尝试过仅编写各行而没有通过每个元素的“子循环”?
for i in l:
f.write("%s %d %d %d\n" % tuple(i))
最小化独立write
事件的数量将为您带来最佳的速度提高。
如果文件足够小以适合内存,则可以在循环中构建输出字符串,然后仅使用一次write
操作就可以输出它。
(注意,有关生成输出字符串的时间测试,请参见下文)
为整个文件制作一个输出字符串的快速方法(这是假设您不希望使用[]
-如果需要,请将它们添加到字符串中):
outstring = "\n".join(["%s %d %d %d" % tuple(i) for i in l])
f.write(outstring)
如果太大,则可以逐块构建字符串(例如,一次10000个项目),然后分批写入。
最后,这几乎类似于json
格式,因此,如果您尝试创建json
文件,则可以执行以下操作:
import json
json.dumps(l)
编辑:您根本不需要json
,只需为此使用str(mylist)
...请参见下面的实现。
后来:
我在生成输出字符串上做了一些计时。
outstr = str(mylist)[1:-1].replace("], ","]\n").replace(",","")
比以下速度快三倍:
outstr = "\n".join(["%s %d %d %d" % tuple(i) for i in mylist])
当您像这样使用列表理解时:
["%s " % item for item in l]
Python创建一个生成器 。 因此, l
的项目数(如您所说)并不是问题。 但是,几乎总是,更多的代码会带来更好的性能。
我的观点:也使用生成器来打印行中的每个元素。 这样,您不必将整个列表加载到内存中。
尝试这个:
l = [['+1', 12, 13, 14], ['+1', 13, 14, 15]]
f = open("your_file.txt", 'w')
for item in l:
f.write('[')
for elem in item[:-1]:
f.write("{}, ".format(elem))
f.write("{}".format(item[-1]))
f.write(']\n')
这至少必须消耗更少的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.