【问题标题】:python os.path.isfile() returns True for some integerspython os.path.isfile() 对某些整数返回 True
【发布时间】:2020-11-17 03:42:27
【问题描述】:

我肯定遗漏了一些明显的东西。给定标量值时,os.path.isfile() 如何返回 True

>>> for i in range(0,20):    print(os.path.isfile(i))
... 
False
False
False
False
False
False
False
False
False
False
False
False
False
True
True
True
True
True
True
True

我正在从一个空目录执行此操作。蟒蛇 3.6。我查看了有关 os.path.isfile() 的其他问题,但没有找到答案。

【问题讨论】:

  • 多么奇怪。我无法重现这个。无论您的工作目录如何,您都会得到相同的结果吗?
  • 我在我的用户目录 - windows 中得到一个 True for i=2。 ... os.path.isfile(2) -> True 无论目录。
  • @khelwood 结果不同。不确定是否取决于工作目录或其他内容
  • 试试os.stat 怎么样?
  • @khelwood 它适用于 i=0,1 和 2 的输出:os.stat_result(st_mode=8592, st_ino=3, st_dev=23, st_nlink=1, st_uid=1000, st_gid= 5、st_size=0、st_atime=1595876800、st_mtime=1595876800、st_ctime=1595513032)

标签: python python-3.x file path


【解决方案1】:

这一切都在文档中:

  • 如果 path 是“现有”常规文件,os.path.isfile 返回 True
  • 如果os.path.exists 返回True路径“存在”
  • 从 3.3 版开始,path 可以是一个整数 - 如果它是一个打开的 文件描述符os.path.exists 返回True
  • file descriptors 是与当前进程已打开的文件相对应的小整数。例如,标准输入通常是文件描述符 0,标准输出是 1,标准错误是 2。进程打开的其他文件将被分配 3、4、5 等等。 (“文件描述符”这个名字有点欺骗性;在 Unix 平台上,文件描述符也引用了套接字和管道。)

【讨论】:

  • 谢谢。恐怕我还是不明白我得到的价值观是从哪里来的。那么您能否通俗地解释一下,为什么有 13 次 False,然后 7 次 False?
  • 每次进程打开一个“文件”时,都会为其分配一个整数“文件描述符”。如果该“文件”是常规文件,os.path.isfile 将在该整数上返回 True
  • 谢谢!但是按照我理解您的解释的方式,它应该首先分配较低的值。那么怎么会有一堆 False 值呢?
  • 可能它在过去打开了其他文件,这些文件的描述符现在已关闭,但在后来的文件打开时并未打开。运行strace 或类似命令以找出和/或查看这些打开的描述符指向的位置;我猜是 Python 本身和你的脚本文件,以及 Python 使用的一些系统库。
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2017-10-28
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2020-08-07
相关资源
最近更新 更多