我想在csv文件中写一些随机的样本数据,直到它是1GB大。以下代码正在工作:
import numpy as np
import uuid
import csv
import os
outfile = 'data.csv'
outsize = 1024 # MB
with open(outfile, 'ab') as csvfile:
wtr = csv.writer(csvfile)
while (os.path.getsize(outfile)//1024**2) < outsize:
wtr.writerow(['%s,%.6f,%.6f,%i' % (uuid.uuid4(), np.random.random()*50, np.random.random()*50, np.random.randint(1000))])
怎样才能更快?
问题似乎主要是IO绑定的。您可以通过以较大的块写入文件而不是一次写入一行来稍微改进I/O:
您可以尝试使用chunksize(每个块写入的行数)来查看在您的计算机上最有效的方法。
下面是一个基准,将上述代码与原始代码进行比较,
outsize
设置为10 MB:所以这比原始代码快25%。
我试着用所需总行数的估计值替换对
os.path.getsize
的调用。不幸的是,它没有提高速度。由于表示最终int所需的字节数不同,估计也不精确——也就是说,它不能完全复制原始代码的行为。所以我把os.path.getsize
放在原地。删除所有不必要的内容,因此应该更快更容易理解:
相关问题 更多 >
编程相关推荐