我正在尝试从0开始一个很长的连续数字列表,并以10,000,000,000或更多的速度完成并将其写入纯文本文件。我目前使用的是所有RAM(12 GB)并使我的计算机重新启动。
i = 0
password = []
file = open("pass.txt", "a")
for i in range (10000):
password.append("%016d" % (i,))
for elem in password:
file.write(str(elem) + '\n')
file.close
print("Finished")
答案 0 :(得分:5)
不要将值存储在list
中,只需直接写入:
# Use with statement to automatically close file properly, even on exception
# as soon as block finishes
with open("pass.txt", "a") as file:
for i in range(10000):
file.write("%016d\n" % i)
print("Finished")
这将缓冲write
s,直到缓冲区填满,然后刷新它,这样你就可以随时写入,并有固定的内存开销。
注意:代价可能有点过于简洁,你可以单行编写,将所有工作推送到C层(在CPython参考解释器上),通过用以下代码替换循环:
file.writelines(map("%016d\n".__mod__, range(10000)))
# Or using format, which looks less hacky by avoiding manual use of operator overloads:
file.writelines(map("{:016d}\n".format, range(10000)))
它是一种微观优化(文件I / O几乎肯定比你在Python中所做的更昂贵),但我认为我指出它是完整的。