【问题标题】:Why do os.path.isfile return False?为什么 os.path.isfile 返回 False?
【发布时间】:2013-07-27 01:58:20
【问题描述】:

我只是python的新手,很抱歉提出这个问题

>>> import os
>>> os.listdir("/home/user/Desktop/1")
['1.txt', '2', '3.txt']
>>> os.path.isfile("/home/user/Desktop/1/1.txt")
True
>>> for i in os.listdir("/home/user/Desktop/1"):
...     print(os.path.isfile(i))
...
False
False
False
>>>

其中两个是文件,那么为什么输出应该是 False,而应该是 True?

【问题讨论】:

    标签: python-2.7


    【解决方案1】:

    当您打印os.path.isfile(i) 时,您正在检查“1.txt”、“2”或“3.txt”是否是一个文件,而当您运行os.path.isfile("/home/user/Desktop/1/1.txt") 时,您拥有该文件的完整路径。

    尝试用

    替换该行
    print(os.path.isfile("/home/user/desktop/1/" + i))
    

    编辑:

    正如 icktoofay 在下面的评论中提到的,更好的解决方案可能是将行替换为

    print(os.path.isfile(os.path.join("/home/user/desktop/1", i)))
    

    或早先将“/home/user/desktop/1”存储到某个变量 x,从而允许将行替换为

    print(os.path.isfile(os.path.join(x,i)))
    

    【讨论】:

    • 如果目录名和文件名在变量中,os.path.join 可以避免在它们之间硬编码/
    【解决方案2】:

    问题在于您的 CWD(当前工作目录),因为 os.listdir() 为您提供的文件与所提供的路径相关并且与 CWD 不一致。解决方法是在使用os.listidr()之前设置你的CWD:

    dir_to_delete = '/home/user/Desktop/1'
    
    os.chdir(dir_to_delete)
    
    [f for f in os.listdir() if os.path.isfile(f)]
    

    或者只是修复文件路径:

    [f for f in os.listdir(dir_to_delete) if os.path.isfile(os.path.join(dir_to_delete, f))]
    

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 2017-01-22
      • 2013-09-18
      • 2014-11-17
      • 2014-03-11
      相关资源
      最近更新 更多