清理垃圾输出文件

时间:2016-01-05 23:44:06

标签: python-3.x io

我对Python很陌生并尝试读取jpg文件并将其编写为一个简单的练习。文件不是很大,只有142 KB,但是当我使用50000字节的缓冲区块来读取和写入new.jpg文件时,它给出了有限的空间错误,并且在C中占用了剩下的4GB空间: \驱动器在我的桌面上,永远不会释放那个内存。我怎样才能看到并释放Python使用的内存。这是我的代码:

def main():

    buffersize = 50000                  
    infile = open('olives.jpg', 'rb')   
    outfile = open('new.jpg', 'wb')
    buffer = infile.read(buffersize)
    while(len(buffer)):
        outfile.write(buffer)
        print('.', end = '')
        infile.read(buffersize)
    print()
    print('Done')

if __name__ == "__main__": main()

请告诉我如何释放此内存,因为我的C:\ Drive内存不足。

谢谢!

1 个答案:

答案 0 :(得分:0)

在你的循环中,你永远不会改变buffer。您需要分配read结果,或者只是反复编写相同的原始buffer内容,循环永远不会结束。更改此while循环的最后一行:

while(len(buffer)):
    outfile.write(buffer)
    print('.', end = '')
    infile.read(buffersize) # <-- Not assigning result

为:

    buffer = infile.read(buffersize)

另外,对于样式点,请将while(len(buffer)):更改为while buffer:; bytes个对象(像所有序列一样)在非零长度时是真实的,在零长度时是虚假的(并且Python不需要条件语句的parens,除非他们需要像分组测试那样的东西)。

至于#34;释放记忆&#34; (意思是&#34;清理垃圾输出文件&#34;),只需将其删除即可。在命令行中,您只需访问运行脚本的工作目录并运行del new.jpg,或者在文件浏览器中以相同的方式导航。如果您不知道文件的位置,在修复无限循环问题后重新运行脚本将在写入之前截断原始文件(因为您的模式包括w),这也将解决问题。