【问题标题】:os.listdir and os.path.isdir confusion, isdir is acting random?os.listdir 和 os.path.isdir 混淆,isdir 是随机的吗?
【发布时间】:2017-03-30 21:14:36
【问题描述】:

我在下面有一个简单的过程来列出文件夹的内容:

def some_process(self):


    dir3 = os.listdir('/Users/somepath/programming/somepathanother/Data_samples')
    for d in dir3:
        if os.path.isdir(d):
            print "DIR: " + d
        elif os.path.isfile(d):
            print "FILE: " + d


    print "PATH THREE:"
    print str(dir3)

    sys.exit(0) 

Data_samples 文件夹的实际内容是: 目录1 目录2 目录3 目录4 文件.zip 另一个文件.zip 目录5

进程的输出没有按预期工作。对于它只是打印的文件:

FILE .DS_Store 没有别的(应该打印出file.zip和anotherfile.zip)

我也意识到,如果我将 resourcetest.py 文件及其对应的 ini 文件复制到该文件夹​​中并运行它,那么它确实会看到它

FILE: .DS_Store
FILE: resourcetest.ini
FILE: resourcetest.py

print str(dir3)的完整输出

PATH THREE: 
['.DS_Store', 'dir1', 'dir2', 'dir3', 'dir4', 'resourcetest.ini','resourcetest.py', 'test.file', 'test.zip', 'dir5']

然后还应该将 dir1 dir2 dir3 dir4 打印为 DIR: " ,但是这一切都没有发生,我不知道为什么,尽管奇怪的是,如果我从列出的文件夹中执行此代码,它确实显示了所有内容正确。

这是从 mac os x 终端运行 python 2.7 的异常情况,还是我在这里遗漏了其他东西。我对使用 listdir 和 isdir 的想法是错误的吗?

【问题讨论】:

  • .DS_Store 是由 osx 创建的...你能给我们print(dir3)的输出吗?
  • 添加了更多代码,我有点认为这是权限问题。我在finder中复制的文件在那里。我在终端中通过触摸构建的那些,没有看到任何目录。如果我从 listdir 中指定的文件夹运行它,这又会发生变化,然后它会按预期工作。

标签: python python-2.7


【解决方案1】:

listdir 只给出名称,而不是完整路径。您需要创建完整路径:

for d in dir3:
    path = os.path.join('/Users/somepath/programming/somepathanother/Data_samples', d)
    if os.path.isdir(path):
        ...

【讨论】:

  • 可能更好的方法是使用next(os.walk("/Users/somepath/..."))。这将给出路径、目录名列表和文件名列表。这听起来正是我们所需要的。
  • @zondo is.walk 将递归遍历所有子目录,这可能不是OP的想法。
  • @HaiVu:这就是我使用next()的原因。这将导致只有第一组,而不是遍历子目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 2011-07-27
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多