gpt4 book ai didi

python - 如何使用 Python 快速创建大文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:18:08 26 4
gpt4 key购买 nike

我有以下用于生成大文本文件的代码:

d = 3
n = 100000
f = open("input.txt",'a')
s = ""
for j in range(0, d-1):
s += str(round(random.uniform(0,1000), 3))+" "
s += str(round(random.uniform(0,1000), 3))
f.write(s)
for i in range(0, n-1):
s = ""
for j in range(0, d-1):
s += str(round(random.uniform(0,1000), 3))+" "
s += str(round(random.uniform(0,1000), 3))
f.write("\n"+s)
f.close()

但即使生成 5GB 的数据似乎也很慢。

我怎样才能让它变得更好?我希望输出是这样的:

796.802 691.462 803.664
849.483 201.948 452.155
144.174 526.745 826.565
986.685 238.462 49.885
137.617 416.243 515.474
366.199 687.629 423.929

最佳答案

嗯,当然,整个事情都是 I/O 绑定(bind)的。你不能输出文件比存储设备写入速度更快。抛开那个,还有有一些可以进行的优化。

从几个较短的字符串构建一个长字符串的方法是次优。你是说,本质上,s = s1 + s2。当你告诉Python 这样做,它连接两个字符串对象来创建一个新的字符串对象。这很慢,尤其是在重复时。

更好的方法是将单个字符串对象收集到列表中或其他可迭代对象,然后使用 join 方法将它们一起运行。为了示例:

>>> ''.join(['a', 'b', 'c'])
'abc'
>>> ', '.join(['a', 'b', 'c'])
'a, b, c'

不是用 n-1 个字符串连接来连接 n 个字符串,而是这样做一步到位。

还有很多可以组合的重复代码。这是一个更简洁的设计,仍然使用循环。

import random

d = 3
n = 1000

f = open('input.txt', 'w')

for i in range(n):
nums = []
for j in range(d):
nums.append(str(round(random.uniform(0, 1000), 3)))
s = ' '.join(nums)
f.write(s)
f.write('\n')

f.close()

一种更简洁、更简洁、更 Pythonic 的方法是使用 list comprehension :

import random

d = 3
n = 1000

f = open('input.txt', 'w')

for i in range(n):
nums = [str(round(random.uniform(0, 1000), 3)) for j in range(d)]
f.write(' '.join(nums))
f.write('\n')

f.close()

请注意,在这两种情况下,我分别写了换行符。那应该是比将它连接到字符串更快,因为 I/O 是缓冲的反正。如果我要加入一个没有分隔符的字符串列表,我会在加入之前添加一个换行符作为最后一个字符串。

正如 Daniel 的回答所说,numpy 可能更快,但也许你没有还想进入 numpy;听起来你是个初学者这点。

关于python - 如何使用 Python 快速创建大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com