【问题标题】:Cleaning up the Garbage Output File清理垃圾输出文件
【发布时间】:2016-01-05 23:44:06
【问题描述】:

我对 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:\ 驱动器内存不足。

谢谢!

【问题讨论】:

    标签: python-3.x io


    【解决方案1】:

    在您的循环中,您永远不会更改 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 不需要括号用于条件语句,除非它们需要用于分组测试之类的东西)。

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

    【讨论】:

    • 非常感谢 ShadowRanger。这很有帮助。
    • @Saeed:不客气。仅供参考,如果这解决了您的问题,您可以投票和/或接受答案(请参阅答案左侧的复选标记和箭头,靠近答案顶部)。
    • 我刚刚做到了。我不知道如何接受。但是,为了投票,我至少需要 15 个声望才能投票。我昨天也尝试过投票,但无法投票。
    • @Saeed:每天学习新的东西(我几年前建立了一个小代表,去年才回到 SO,所以我不记得约束了)。谢谢。
    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多