【发布时间】:2019-02-12 16:05:45
【问题描述】:
我有一个脚本,它通过检查每个需要的文件是否存在来更新文件层次结构,如果不存在则下载它们。
因为使用完整路径会导致我认为文件名太长且通常包含特殊字符的问题,我已将其更改为 os.chdir 到每个子目录中,检查所需文件并下载它们。
但是我的程序总是在一个文件上崩溃,因为 os.path.isfile 出于某种原因说它不存在(即使它确实存在)。真正令人困惑的部分是当它尝试使用with open(path, "wb") as f: 下载它并运行到FileNotFoundError,即使它以写入模式打开。
如果路径链接到一个不存在的目录但在我的情况下它没有链接到任何目录,那么当您尝试open 时,您似乎可以获得FileNotFoundError。
我尝试在文件名上使用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)
【问题讨论】:
-
如果可能的话,你能把代码贴出来吗?
-
我尝试解决的另一个技巧是将文件下载为“temp”,然后将其重命名为正确的名称,但我仍然遇到完全相同的问题。
-
刚刚检查了文件名是否太长但它的长度为 91 个字符,并且脚本在遇到此问题之前管理超过 110 个字符的文件。
标签: python windows file-io operating-system