我对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内存不足。
谢谢!
答案 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
),这也将解决问题。