我试图创建一个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
问题:
1 - 如何使用for循环打开多个文件描述符?
2 - 上述代码有什么问题?
答案 0 :(得分:5)
conf.set("textinputformat.record.delimiter", ". ");
返回您操作的文件对象。
如果丢弃返回值,Python将垃圾收集它,从而关闭文件。因此,在循环中调用open
而不使用返回值是没用的,因为返回的所有文件对象都将被垃圾回收。
您想要的是保存这些文件对象:
open
一些提示:
Files = [open('/tmp/aaa{0}'.format(str(i)), 'w') for i in xrange(10)]
时不需要str(i)
,因为后者关心类型转换本身。 format
中的零,因为Python插入{0}
s format
- 参数(计数在格式字符串后面开始)而不是i
- 格式字符串中的一对大括号。 总而言之,代码可以简化为:
i
答案 1 :(得分:-1)
你需要获取文件描述符,在你做任何你想做的事情后,关闭它以使其刷新。
所以你需要更像这样的东西:
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]