Попытка сопоставить частичное имя файла в нескольких папках с помощью glob.glob - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь найти самую новую версию файлов, каждый из которых содержит уникальный ссылочный код как часть имени файла, например, 12345 . У меня есть большой список ссылочных кодов, которые находятся в парах, потому что программа сравнивает содержимое двух PDF-файлов (каждый раз через), используя импорт fuzzywuzzy. Вывод представляет собой список нечетких отношений и путей к папкам.

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

Ссылочные коды находятся в списке под названием listoflists. Он проходит по ним и объединяет путь к файлу. Я попытался использовать ** \, который работает (на дереве), когда просто проверяю суффикс файла, например PDF. Но при проверке дерева на наличие эталонных кодов с использованием подстановочной стороны кода, код не дает ожидаемых результатов

работает: -

r"C:\compare2\*" + str(log1) + "*.pdf"

не работает должным образом: -

r"C:\compare2\**\*" + str(log1) + "*.pdf"

Нет ошибки, только при тестировании одной папки я получаю ожидаемые результаты, тогда при использовании ** в более чем одной папке он не проверяет все папки на наличие строки.

keep_file_path1 = []
keep_file_path2 = []
fuzzy_list = []

def log_num(fuzzy_list, list_of_lists):
    # iterate through log numbers stored in list
    for log1, log2 in list_of_lists: 
        # passing a string into the file name by + concatenating +.
        file_path1 = r"C:\compare2\**\*" + str(log1) + "*.pdf"
        file_path2 = r"C:\compare2\**\*" + str(log2) + "*.pdf"
        # check if files exists
        if glob.glob(file_path1): 
            print("there is a match for log number: " + str(log1) + "  file_path1")
            if glob.glob(file_path2): 
                print("there is a match for log number: " + str(log2) + "  file_path2")
                # go to compare function
                compare(file_path1, file_path2)
        else:
            print ("NO Matches for log number: " + str(log1) + " or for log number: " + str(log2) + ".")
            continue # go find a different number
    else:  
        save_to_file(fuzzy_list, keep_file_path1, keep_file_path2)

Проверка на последнюю версию работает (когда в одной папке ...) и находится в другой функции

    # check for the newest file
    latest_file1 = max(list_of_files, key=os.path.getctime)

Я еще не пробовал os.walk, так как хочу сначала попробовать glob. Можно ли это сделать с помощью glob? Или, если бы я захотел получить самую новую версию каждого из них, можно было бы расплющить дерево.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...