Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:os.path.isfile没有';无法检测文件_Python_Windows_File Io_Operating System - Fatal编程技术网

Python:os.path.isfile没有';无法检测文件

Python:os.path.isfile没有';无法检测文件,python,windows,file-io,operating-system,Python,Windows,File Io,Operating System,我有一个脚本,通过检查每个需要的文件是否存在来更新文件层次结构,如果不存在,则下载它们 因为使用完整路径会导致文件名出现问题,我认为这些文件名太长并且经常包含特殊字符,所以我将其更改为os.chdir,并将其下载到每个子目录中,检查所需的文件并下载它们 然而,我的程序总是在一个文件上崩溃,因为os.path.isfile出于某种原因说它不存在(即使它存在)。真正让人困惑的是,当它试图以f:的open(路径,“wb”)下载它时,即使它是在写模式下打开的,也会遇到FileNotFoundError

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

因为使用完整路径会导致文件名出现问题,我认为这些文件名太长并且经常包含特殊字符,所以我将其更改为
os.chdir
,并将其下载到每个子目录中,检查所需的文件并下载它们

然而,我的程序总是在一个文件上崩溃,因为
os.path.isfile
出于某种原因说它不存在(即使它存在)。真正让人困惑的是,当它试图以f:的open(路径,“wb”)下载它时,即使它是在写模式下打开的,也会遇到
FileNotFoundError

如果路径链接到一个不存在的目录,但在我的情况下它没有链接到任何目录,那么当您尝试打开时,您似乎可以得到
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)

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

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

通过将整个项目移动到根目录,解决了此问题


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

如果可能,您可以发布代码吗?我尝试解决的另一个技巧是将文件作为“temp”下载然后将其重命名为正确的名称,但我仍然遇到了完全相同的问题。只是检查了文件名是否太长,但其长度为91个字符,并且脚本管理的文件超过110个字符,然后才出现这种情况。在Windows 10上运行的Python 3.6+中,启用了长路径,我们可以使用多达32760个字符的路径,而无需任何额外处理。否则,对于缺少隐式长路径支持的较早版本的Python或Windows,我们必须在完全限定路径前面加上
“\\\\?\\”
。如果它是UNC路径(例如
“\\\\server\\share\\file”
),请重写它以使用“UNC”设备(例如
“\\\\?\\UNC\server\share\file”
)。另外,对于Python2,我们必须使用
unicode
字符串。