我有一个脚本,通过检查每个所需文件是否存在以及是否不下载它们来更新文件层次结构。
由于使用完整路径会导致我认为文件名过长且经常包含特殊字符的问题,因此我已将其更改为os.chdir
到每个子目录中,检查所需的文件并下载。 / p>
但是我的程序始终在一个文件上崩溃,因为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)
答案 0 :(得分:0)
原来是我最初的怀疑,文件名实际上太长了。
基本文件名不是最长的,但是文件名的完整路径(包括到根目录的每个子目录)都太长了。
此问题已通过将整个项目移至根目录来解决。
一个有趣的解决方法是,您可以创建文件结构,而文件结构的文件名在window Explorer中太长,但是如果您甚至尝试仅使用python检测是否存在文件,就会遇到问题。