程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何在不命中MemoryError的情况下逐步写入巨大的字节数组以进行文件存储

发布于2020-01-16 22:16     阅读(1149)     评论(0)     点赞(6)     收藏(0)


我正在使用一种工具生成可用于测试目的的随机数据。请参阅下面的代码部分,该部分使我感到悲伤。当文件大约为400MB时,它比常规解决方案运行得更快,更完美(大约需要20秒),但是,一旦达到500MB,我就会遇到内存不足的错误。我如何才能一次从内存中提取内容并将其写到文件中,而内存中的内容逐渐增加到不超过10 MB。

def createfile(filename,size_kb):
    tbl = bytearray(range(256))
    numrand = os.urandom(size_kb*1024)
    with open(filename,"wb") as fh:
    fh.write(numrand.translate(tbl))

createfile("file1.txt",500*1024)

任何帮助将不胜感激


解决方案


结合Jaco和mhawk并处理一些float转换。这是可以在不到10秒的时间内生成Gbs数据的代码

def createfile(filename,size_kb):
    chunksize = 1024
    chunks = math.ceil(size_kb / chunksize)
    with open(filename,"wb") as fh:
        for iter in range(chunks):
            numrand = os.urandom(int(size_kb*1024 / chunks))
            fh.write(numrand)
        numrand = os.urandom(int(size_kb*1024 % chunks))
        fh.write(numrand)

在不到8秒的时间内创建1 Gb文件



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/226458/f04d1662c77335b9a515/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

6 0
收藏该文
已收藏

评论内容:(最多支持255个字符)