使用python和NumPy生成大型随机文本文件
对于测试数据,我需要快速创建随机文本的大文件。我有一个解决方案,如下所示:使用python和NumPy生成大型随机文本文件,python,string,file,numpy,random,Python,String,File,Numpy,Random,对于测试数据,我需要快速创建随机文本的大文件。我有一个解决方案,如下所示: import random import string n = 1024 ** 2 # 1 Mb of text chars = ''.join([random.choice(string.letters) for i in range(n)]) with open('textfile.txt', 'w+') as f: f.write(chars) 我的问题是,这需要653毫秒来执行,对我的使用来说太多
import random
import string
n = 1024 ** 2 # 1 Mb of text
chars = ''.join([random.choice(string.letters) for i in range(n)])
with open('textfile.txt', 'w+') as f:
f.write(chars)
我的问题是,这需要653毫秒来执行,对我的使用来说太多了
有没有更快的方法可以快速生成包含随机文本的文本文件?创建一个字母数组:
In [662]: letters = np.array(list(chr(ord('a') + i) for i in range(26))); letters
Out[662]:
array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],
dtype='<U1')
时间:
或者
In [705]: %timeit np.random.choice(np.fromstring(letters, dtype='<U1'), n)
100 loops, best of 3: 14.1 ms per loop
In[705]:%timeit np.random.choice(np.fromstring(letters,dtype=)我很好奇,这里的用例是什么?您可以将random.choice(string.letters)中的I放在范围(n)内进入生成器并使用yield使其更快使用一些东西,如faker库python@JonasAdler我用numpy计时了一种方法,将速度降低到370ms。这是否仍然太慢?我可以稍微修改一下,并获得一个数量级的更好性能:np.random.choice(np.fromstring(string.letters,dtype='S1'),n)
,总时间17 ms
。你能更新这个答案吗,我会接受这个答案吗?@JonasAdler,它会给你一个字符列表,对吗?你会想把它们连接在一起。似乎f.write
接受字符数组。结果看起来不错,基本上是即时的。@JonasAdler,如果你不介意的话,我会让你快一点事实上它们不是二进制字符串。@JonasAdler很乐意帮忙:)
In [664]: n = 1024 ** 2
In [701]: %timeit np.random.choice(letters, n)
100 loops, best of 3: 15.1 ms per loop
In [705]: %timeit np.random.choice(np.fromstring(letters, dtype='<U1'), n)
100 loops, best of 3: 14.1 ms per loop