开发者社区> 问答> 正文

在Python中生成包含4列的1 GB文件

python小能手 2019-01-22 16:46:46 374

我想在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,类似于“反压缩”。

Python
分享到
取消 提交回答
全部回答(1)
  • python小能手
    2019-07-17 23:26:20

    试试这个。我认为它会有更少的内存分配,所以希望更快一点(对我来说需要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()

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题