Py Поиск файлов в папке и подпапках - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь найти список файлов в дереве каталогов. По сути, я предоставляю текстовый файл со всеми терминами, которые я хочу найти (~ 500), и он ищет их в каталоге и подкаталогах. Однако у меня возникли проблемы с - я считаю - шагами, которые код выполняет и завершает преждевременно без поиска во всех папках.

Код, который я использую (pattern - это имя текстового файла):

import os

def locateA(pattern, root):
    file  = open(pattern, 'r')
    for path, dirs, files in os.walk(root):
        for word in files:
            for line in file:
                if line.strip() in word:
                    print os.path.join(path, word), line.strip()

Есть идеи, где я ошибаюсь?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Вся или часть проблемы может заключаться в том, что вы можете перебирать файл только один раз, если вы не используете file.seek() для сброса текущей позиции в файле.

Убедитесь, что вы пытаетесь вернуться к началу файла, прежде чем пытаться повторить его снова:

import os

def locateA(pattern, root):
    file  = open(pattern, 'r')
    for path, dirs, files in os.walk(root):
        for word in files:
            file.seek(0)             # this line is new
            for line in file:
                if line.strip() in word:
                    print os.path.join(path, word), line.strip()
0 голосов
/ 14 марта 2012

for line in file потребляет строки в file в первый раз, а затем каждый раз после этого становится пустым.

Попробуйте это вместо этого, что решает эту и некоторые другие проблемы:

import os

def locateA(pattern, root):
    patterns = open(pattern, 'r').readlines() # patterns is now an array, no need to reread every time.
    for path, dirs, files in os.walk(root):
        for filename in files:
            for pattern in patterns:
                if pattern.strip() in filename:
                    print os.path.join(path, filename), pattern.strip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...