python - 如何在不遇到 MemoryError 的情况下逐步将一个巨大的字节数组写入文件

标签 python arrays

我正在开发一种工具,可以生成用于测试目的的随机数据。请参阅下面让我感到悲伤的代码部分。当文件大约为 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)

任何帮助将不胜感激

最佳答案

您可以一次写出 10MB 的 block ,而不是一次性生成整个文件。正如@mhawke 所指出的,translate 调用是多余的,可以删除:

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

createfile("c:/file1.txt",500*1024)

关于python - 如何在不遇到 MemoryError 的情况下逐步将一个巨大的字节数组写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572348/

相关文章:

python - 如何将 pandas 系列写入/读取 csv?

arrays - 如何在 PostgreSQL 函数中声明一个行类型数组?

java - 不使用 if else 或三元运算符的三个数字中的第二大数字。使用最大和最小函数

python - 使用pythonnet实例化后如何让msaccess及其属性可用?

python - openAI DALL-E ModuleNotFoundError

python - Python 中使用嵌套循环的两位数乘法表

python - BeautifulSoup:6k 条记录 - 但在解析 20 行后停止

arrays - 在 Common Lisp 中通过引用(而不是通过值)传递子数组

c++ - 使用字符串变量初始化字符数组

arrays - 以特定方式创建由矩阵重复组成的 3D 数组