Python: os.path.isfile не обнаруживает файл - PullRequest
0 голосов
/ 07 сентября 2018

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

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

Однако моя программа постоянно падает на одном файле, потому что os.path.isfile по какой-то причине говорит, что он не существует (хотя и существует). Действительно запутанная часть - когда он пытается загрузить его с with open(path, "wb") as f: и запускается в FileNotFoundError, даже если он открывается в режиме записи.

Похоже, что вы можете получить FileNotFoundError при попытке open, если путь указывает на каталог, который не существует, но в моем случае он не ссылается ни на какие каталоги.

Я пытался использовать os.path.split в имени файла, если оно каким-то образом содержит косую черту или обратную косую черту, однако имя файла выглядит нормально.

Вот код. Эта проблема не относится к первому каталогу, с которым он сталкивается, ему удается пройти как минимум дюжину, прежде чем он столкнется с этим.

stepOut = 1
paths = list(map(unquote, url.split("/")[6:]))
for index, path in enumerate(paths):
    if index != len(paths) - 1:
        if not os.path.isdir(path):
            os.mkdir(path)
        os.chdir(path)
        stepOut += 1
    else:
        if not os.path.isfile(path):
            r = requests.get(url, stream=True)
            if r.status_code == 200:
                print("Saving", path)
                with open(path, 'wb') as f:
                    r.raw.decode_content = True
                    shutil.copyfileobj(r.raw, f)
            else:
                print("Error getting:", url)
        else:
            print("Skipping", paths)
os.chdir("..\\" * stepOut)

1 Ответ

0 голосов
/ 07 сентября 2018

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

Базовое имя файла было не самым длинным, но полный путь к имени файла, включая все подкаталоги root, был слишком длинным.

Проблема была решена путем перемещения всего проекта в корневой каталог.

Интересный вывод: вы можете создавать файловые структуры с слишком длинными именами файлов в проводнике, но если вы даже попытаетесь просто определить, есть ли там файлы с python, у вас возникнут проблемы.

...