首页 > 解决方案 > Python:os.path.isfile 没有检测到文件

问题描述

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

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

标签: pythonwindowsfile-iooperating-system

解决方案


原来这是我最初的怀疑,文件名实际上太长了。

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

通过将整个项目移动到根目录来解决该问题。

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


推荐阅读