gpt4 book ai didi

python - open() 不在 for 循环中打开文件描述符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:20 28 4
gpt4 key购买 nike

我正在尝试创建一个 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 - 上面的代码有什么问题?

最佳答案

open 返回您操作的文件对象。

如果丢弃返回值,Python 将对其进行垃圾回收,从而关闭文件。因此,在循环中调用 open 而不使用返回值 是无用的,因为返回的所有文件对象都将被垃圾回收。

您想要的是保存那些文件对象:

Files = [open('/tmp/aaa{0}'.format(str(i)), 'w') for i in xrange(10)]

一些提示:

    当您使用 format 时不需要
  1. str(i) 因为后者关心类型转换本身。
  2. 您也不需要格式字符串中 {0} 中的零,因为 Python 插入了 format 的第 i 参数(计数在格式字符串之后开始)而不是格式字符串中的第 i 对大括号。

总而言之,代码可以简化为:

Files = [open('/tmp/aaa{}'.format(i), 'w') for i in xrange(10)]

关于python - open() 不在 for 循环中打开文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869774/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com