请看下面的代码:
for i in xrange(1,5000):
with open(r'test\test%s.txt' % i, 'w') as qq:
qq.write('aa'*3000)
Run Code Online (Sandbox Code Playgroud)
它似乎是根据所有Python规则编写的; 文件在使用后关闭.好像.但实际上它似乎建议(!)系统关闭文件,而不是显式关闭它,因为当我在资源监视器上查看它时会显示很多打开的文件.它给了我很多问题,因为在我的脚本中我使用了很多文件,经过很长一段时间我得到了"太多打开文件"错误,尽管从源代码中"关闭"它.
有没有办法在Python中显式关闭文件?或者我如何检查文件是否真的(!)关闭?
更新:我刚试过另一个监控工具 - 来自Sysinternals的Handle,它显示所有正确的,我相信它.因此,它可能是资源监视器本身的问题.
截图显示打开的文件:

glg*_*lgl 10
你的代码
for i in xrange(1, 5000):
with open(r'test\test%s.txt' % i, 'w') as qq:
qq.write('aa' * 3000)
Run Code Online (Sandbox Code Playgroud)
在语义上完全等同于
for i in xrange(1, 5000):
qq = open(r'test\test%s.txt' % i, 'w')
try:
qq.write('aa' * 3000)
finally:
qq.close()
Run Code Online (Sandbox Code Playgroud)
with与文件一起使用是一种确保文件在with块保留后立即关闭的方法.
所以你的问题必须在其他地方.
也许正在使用的Python环境的版本有一个错误,fclose()由于某种原因没有调用.
但你可能会尝试类似的东西
try:
qq.write('aa' * 3000)
finally:
# qq.close()
os.close(qq.fileno())
Run Code Online (Sandbox Code Playgroud)
系统直接调用.
| 归档时间: |
|
| 查看次数: |
7494 次 |
| 最近记录: |