在 Python 中生成包含 4 列的 1 GB 文件
Generate 1 GB file containing 4 columns in Python
我想在 python 中生成具有以下规范的文件:
第 1 列:斯诺
第 2 列:应随机分配为数字 1-10
Column 3-Column4: 应该是长度为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,类似于 "Anti-Compression"。
谢谢
试试这个。我认为它将有更少的内存分配,所以希望更快一点(对我来说大约需要 300 秒)。您可以通过将数据直接流式传输到文件来更快地完成它,没有真正需要使用 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()
我想在 python 中生成具有以下规范的文件:
第 1 列:斯诺 第 2 列:应随机分配为数字 1-10 Column 3-Column4: 应该是长度为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,类似于 "Anti-Compression"。
谢谢
试试这个。我认为它将有更少的内存分配,所以希望更快一点(对我来说大约需要 300 秒)。您可以通过将数据直接流式传输到文件来更快地完成它,没有真正需要使用 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()