我想在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,类似于“抗压缩”。
谢谢
答案 0 :(得分:1)
尝试一下。我认为它将分配的内存更少,因此希望更快一些(对我来说大约300s)。您可以通过直接将数据直接流到文件中来更快地执行此操作,而无需真正使用Pandas,但是在您开始使用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()