我正在尝试创建一个for循环并打开一堆文件描述符,但不幸的是,它在for循环中对我不起作用。
>>> import os
>>> os.getpid()
6992
>>> open('/tmp/aaa', 'w')
<open file '/tmp/aaa', mode 'w' at 0x7fa7c9645ae0>
>>> for i in xrange(10):
... open('/tmp/aaa{0}'.format(str(i)), 'w')
...上面的脚本只打开1个fd:
vagrant@workspace:~$ ls -alht /proc/6992/fd/ | grep tmp
l-wx------ 1 vagrant vagrant 64 Nov 29 15:18 11 -> /tmp/aaa问题:
如何使用for循环打开多个文件描述符?
上面的代码有什么问题?
发布于 2016-11-29 15:39:29
open返回您操作的文件对象。
如果放弃返回值,Python将垃圾收集它,从而关闭文件。因此,在循环中不使用返回值调用open是无用的,因为返回的所有文件对象都将被垃圾收集。
您想要的是保存这些文件对象:
Files = [open('/tmp/aaa{0}'.format(str(i)), 'w') for i in xrange(10)]一些小贴士:
str(i)时,不需要format,因为后者关心类型转换本身。{0}中的零,因为Python插入了format的i-th参数(计数在格式字符串之后开始),而不是格式字符串中的i-th一对大括号。总之,该守则可简化为:
Files = [open('/tmp/aaa{}'.format(i), 'w') for i in xrange(10)]发布于 2016-11-29 15:41:57
您需要获取文件描述符,并且在您对它做了任何想要做的事情之后,关闭它以使其刷新。
所以你需要更像这样的东西
for i in range(10):
f = open('/tmp/aaa{0}'.format(str(i)), 'w')
# manipulate the file
f.close()如果您需要保存这些文件描述符以在稍后的代码中访问它们,则应该将它们保存在某个地方,比如列表。
fs = [open('/tmp/aaa{0}'.format(str(i)), 'w') for i in range(10)]
# manipulate files
_ = [f.close() for f in fs]https://stackoverflow.com/questions/40869774
复制相似问题