У меня есть скрипт, который обновляет файловую иерархию, проверяя, существует ли каждый необходимый файл и, если нет, загружает их.
Поскольку использование полных путей вызывало проблемы с именами файлов, которые, по моему мнению, были слишком длинными и часто содержали специальные символы, я изменил его на 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)