繁体   English   中英

如何编写字符串和整数列表以有效归档

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM