请看下面的代码:
for i in xrange(1,5000):
with open(r'test\test%s.txt' % i, 'w') as qq:
qq.write('aa'*3000)
它似乎是按照所有 Python 规则编写的;使用后文件正在关闭。好像。但实际上它似乎建议(!)系统关闭文件,而不是明确关闭它,因为当我查看资源监视器时它显示了很多打开的文件。它给我带来了很多问题,因为在我的脚本中我使用了很多文件,很长一段时间后,尽管从源代码中“关闭”了它,但我还是收到了“太多打开的文件”错误。
有没有办法在 Python 中显式关闭文件?或者我如何检查文件是否真的(!)关闭了?
更新:我刚刚尝试使用另一个监控工具 - 来自 Sysinternals 的 Handle,它显示一切正确,我相信它。所以,这可能是资源监视器本身的问题。
显示打开文件的屏幕截图:
最佳答案
你的代码
for i in xrange(1, 5000):
with open(r'test\test%s.txt' % i, 'w') as qq:
qq.write('aa' * 3000)
在语义上完全等同于
for i in xrange(1, 5000):
qq = open(r'test\test%s.txt' % i, 'w')
try:
qq.write('aa' * 3000)
finally:
qq.close()
因为对文件使用 with
是一种确保在离开 with
block 后立即关闭文件的方法。
所以你的问题一定出在其他地方。
可能是使用的Python环境版本有bug,fclose()
由于某种原因没有被调用。
但是你可以尝试类似的东西
try:
qq.write('aa' * 3000)
finally:
# qq.close()
os.close(qq.fileno())
直接进行系统调用。
关于python - 在 Python 中关闭文件的显式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25176168/