Python 3.x 清理垃圾输出文件

Python 3.x 清理垃圾输出文件,python-3.x,io,Python 3.x,Io,我对Python非常陌生,尝试读取jpg文件并将其作为一个简单的练习来编写。该文件不是很大,只有142 KB,但当我使用50000字节的缓冲区块读写一个新的.jpg文件时,它产生了有限的空间错误,并耗尽了我桌面上C:\驱动器中剩余的所有4GB空间,并且从未释放过该内存。如何查看和释放Python使用的内存。这是我的密码: def main(): buffersize = 50000 infile = open('olives.jpg', 'r

我对Python非常陌生,尝试读取jpg文件并将其作为一个简单的练习来编写。该文件不是很大,只有142 KB,但当我使用50000字节的缓冲区块读写一个新的.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:\驱动器内存不足


谢谢大家!

在循环中,您永远不会更改
缓冲区
。您需要分配
read
结果,或者您只是一遍又一遍地编写相同的原始
buffer
内容,循环永远不会结束。在循环时更改此
的最后一行:

while(len(buffer)):
    outfile.write(buffer)
    print('.', end = '')
    infile.read(buffersize) # <-- Not assigning result
另外,对于样式点,将
while(len(buffer)):
更改为
while buffer:
<代码>字节
对象(像所有序列一样)在非零长度时是真实的,在零长度时是虚假的(Python不需要条件语句的参数,除非它们用于分组测试)


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

非常感谢ShadowRanger。这很有帮助。@Saeed:不客气。仅供参考,如果这解决了您的问题,您可以向上投票和/或接受答案(请参见答案左侧靠近顶部的复选标记和箭头)。我刚刚做到了。我不知道如何接受。然而,为了投票,我需要至少15个声誉来投票。我昨天也试过投票,但没能做到。@Saeed:每天学习新东西(我几年前建立了一个小代表,去年才恢复到这个水平,所以我不记得有什么限制)。谢谢
    buffer = infile.read(buffersize)