Не удается найти файл с помощью os.walk () - PullRequest
1 голос
/ 15 сентября 2011

Я создал файл с именем program1.py в моей директории / home / n00b. Затем я открыл python и хотел посмотреть, смогу ли я написать скрипт, чтобы найти его местоположение. Я сделал это:

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

Почему это не работает? Кажется, он ищет каждый файл, потому что мой экран заполняется частью «поиск», но он никогда не находит его.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2011

Это не работает, потому что os.walk возвращает 3-кортеж: текущий каталог, список имен каталогов здесь и список имен файлов здесь:

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

Ваше утверждение печати должно было показать вам,Оператор in не будет глубоко заглядывать в кортеж, и поскольку ваше имя файла не было ни одним из трех элементов в кортеже, ваш код его не нашел.

0 голосов
/ 15 сентября 2011

Вы можете просто изменить f -> f [2], чтобы получить 3-й элемент кортежа, возвращенный walk.

for f in os.walk('/home/n00b'):
     print 'searching', f
     if 'program1.py' in f[2]:
          print 'found'
          break
0 голосов
/ 15 сентября 2011

Функция os.walk() работает не так, как вы ожидаете.Вместо того, чтобы давать список файлов, он дает кортеж (похожий на список) с каталогом, подкаталогом и файлами.Итак, вы можете использовать:

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

Надеюсь, это поможет.

...