我想在python中生成一个具有以下规范的文件:
第1列:Sno第2列:应随机分配为数字1-10第3列 - 第4列:应为长度为1-32的随机字符
我希望这个文件超过1 GB的大小。我目前正在使用此代码:
import pandas as pd
import numpy as np
import random
import string
from random import choices
from string import ascii_lowercase
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(50000000,1)),
columns=['integer1'])
df['String1']= ["".join(choices(ascii_lowercase, k=random.randint(1,32))) for _ in range(50000000)]
df['String2']= ["".join(choices(ascii_lowercase, k=random.randint(1,32))) for _ in range(50000000)]
但是这段代码非常慢,耗费了很多时间。有没有更有效的方法呢?
考虑到字符串列,我也找到了元音数量最多的行。
另外,有没有办法不生成5000万(代码中看到的行),但仍然使大小达到1 GB,类似于“反压缩”。
试试这个。我认为它会有更少的内存分配,所以希望更快一点(对我来说需要300s)。你可以通过将数据直接传输到文件来更快地完成它,不需要使用Pandas,但我在这里使用它时
import pandas as pd
import numpy as np
import random
import string
from random import choices
from string import ascii_lowercase
size = 50000000
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(size,1)),
columns=['integer1'])
df['String1']= pd.util.testing.rands_array(32, size)
df['String1'] = df['String1'].apply(lambda x: x[0:random.randint(0,32)])
df['String2']= pd.util.testing.rands_array(32, size)
df['String2'] = df['String2'].apply(lambda x: x[0:random.randint(0,32)])
df.head()
或者,直接进入将使用更少内存的文件:
f = open("demofile.txt", "w")
for i in range(0,30000000):
f.write("{},{},{}\n".format(random.randint(0,10), ''.join(choices(ascii_lowercase, k=random.randint(1,32))), ''.join(choices(ascii_lowercase, k=random.randint(1,32)))))
if i % 50000 == 0:
f.flush()
f.close()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。