Python:os.path.isfile 不会检测到该文件



我有一个脚本,通过检查每个需要的文件是否存在以及如果没有下载它们来更新文件层次结构。

因为使用完整路径会导致我认为文件名太长并且通常包含特殊字符的问题,所以我已将其更改为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)

事实证明,这一直是我最初的怀疑,文件名实际上太长了。

基本文件名不是最长的,但文件名的完整路径(包括要根目录的每个子目录(太长。

此问题已通过将整个项目移动到根目录得到解决。

一个有趣的收获是,您可以在窗口资源管理器中创建文件名太长的文件结构,但如果您甚至尝试简单地使用 python 检测是否存在文件,则会遇到问题。

最新更新