Как мне указать файл, который не существует в пути? - PullRequest
0 голосов
/ 14 января 2020

Я использовал это, чтобы найти файл по заданному пути:

path = "C:\\Users\\derpderp\\"
name = "derp.xlsx"

for root, dirs, files in os.walk(path):
    if name in files:
        print(name)

Но как можно go сделать обратное? Так что если файл не существует: укажите этот файл.

Если я напишу:

if name not in files:
    print(name)

Это будет повторять имя файла, которое не существует для каждой папки / файла и т. Д. c.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вы можете использовать функцию pathlib resolve() и попробовать / исключить ошибку FileNotFound.

import pathlib

path = "C:\\Users\\derpderp\\"
name = "derp.xlsx"

try:
    file = pathlib.Path(path+name)
    file.resolve(strict=True)
except FileNotFoundError as e:
    print(name)

https://docs.python.org/3/library/pathlib.html

0 голосов
/ 14 января 2020

Хотя использование модуля pathlib, как показано в ответе @Ben Corcoran, вероятно, будет лучшим (и самым быстрым) способом сделать это, вот альтернатива, которая использует встроенную функцию any():

import os

def any_exists(filename, path):
    def gen_files(path):
        for root, dirs, files in os.walk(path):
            if filename in files:
                return filename
        return ()

    return any(gen_files(path))


path = "C:\\Users\\martineau"
name = "derp.xlsx"

if not any_exists(name, path):
    print(f'No file named {name} exists.')
else:
    print(f'A file named {name} exists.')
...