Перебирайте файлы в каталоге для определенного файла. Если файла нет, добавьте «Файл не найден» в список, иначе добавьте местоположение файла - PullRequest
0 голосов
/ 15 мая 2019

У меня есть список имен файлов в листе Excel, для которого мне нужно расположение файла.Я хочу, чтобы код прошел через все файлы в указанном каталоге и, если он найдет файл, добавит местоположение файла в список.Если файл не найден, я хочу добавить в список «Файл не найден».

Мой код работает, если файл существует, однако я не могу найти способ решить проблему, когда файл не существует.Я пробовал:

if name not in file:
   file_location.append("File Not Found")

, но для этого добавляю «Файл не найден» для каждого файла, который он просматривает.

def file_loc(basedir, filename):
    """Searches through the directory for a particular file and then saves that path into a list"""
    for root, dirs, files in os.walk(basedir):
        for name in files:
            if filename in name:
                location = os.path.abspath(os.path.join(root, name))
                file_location.append(location)

Я хотел бы список, который распечатывает все местоположения файлов файлов в списке, и если местоположение файла не может быть найдено, список должен содержать «Файл не найден».Так, например, если бы файлы, которые я хотел найти, были [foo, bar, soap], а файл мыла отсутствовал в моем каталоге, он распечатал бы:

[File/path/to/foo, File/path/to/bar, "File Not Found"]

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 15 мая 2019

Проблема в том, что вы проверяете, соответствует ли конкретное имя файла, и хотите узнать, совпадает ли оно с каким-либо. Если после того, как вы запустили все файлы, ни один из которых не был найден, вы можете сказать, что он не найден Поэтому я бы предложил использовать логическую переменную, чтобы увидеть, была ли она вообще найдена. Затем, после завершения цикла, проверьте и добавьте, если необходимо. Это должно выглядеть примерно так.

def file_loc(basedir, filename):
"""Searches through the directory for a particular file and then saves that path into a list"""
found = false
for root, dirs, files in os.walk(basedir):
    for name in files:
        if filename in name:
            location = os.path.abspath(os.path.join(root, name))
            file_location.append(location)
            found = True
if not found:
  file_location.append("File Not Found")
...