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