【问题标题】:Can't find file with os.walk()使用 os.walk() 找不到文件
【发布时间】:2011-09-15 01:34:32
【问题描述】:

我在 /home/n00b 目录中创建了一个名为 program1.py 的文件。 然后我打开python,我想看看我是否可以编写一个脚本来找到它的位置。我这样做了:

for f in os.walk('/home/n00b'):
     print 'searching', f
     if 'program1.py' in f:
          print 'found'
          break

为什么这不起作用?它似乎正在搜索每个文件,因为我的屏幕充满了“搜索”部分,但它从未找到它。

【问题讨论】:

  • 对不起,如果代码看起来很奇怪。 - 从我的 iPhone 上发布解释了原因。 ;O

标签: python file search os.walk


【解决方案1】:

它不起作用,因为os.walk 返回一个 3 元组:当前目录、此处的目录名列表和此处的文件名列表:

for curdir, dirs, files in os.walk('/home/n00b'):
     print 'searching', files
     if 'program1.py' in files:
          print 'found'
          break

您的打印声明应该已经向您展示了这一点。 in 运算符不会深入查看元组,并且由于您的文件名在任何时候都不是元组中的三个元素之一,因此您的代码没有找到它。

【讨论】:

  • 啊,这就是为什么,嗯?非常感谢。
【解决方案2】:

函数os.walk() 无法按您预期的方式工作。它没有给出文件列表,而是给出了一个包含目录、子目录和文件的元组(类似于列表)。所以,你可以使用:

for d, s, f in os.walk('/home/n00b'):
     print 'searching', d
     if 'program1.py' in f:
          print 'found'
          break

希望对你有帮助。

【讨论】:

    【解决方案3】:

    您只需更改 f -> f[2] 即可获取 walk 返回的元组的第三个元素。

    for f in os.walk('/home/n00b'):
         print 'searching', f
         if 'program1.py' in f[2]:
              print 'found'
              break
    

    【讨论】:

    • 哈!我们都同时到达那里......我更喜欢 Ned 的回答,因为它告诉你更多关于正在发生的事情(并且通常更有用),即使我只需要 3 个字节的变化:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多