Python如何使用扩展路径长度

Rom*_*aan 5 python python-3.x

我在Windows上运行我的python代码并尝试遍历并将所有文件名及其路径存储在文件中.但是Windows限制为260个字符.

os.chdir(self.config.Root_Directory_Path())        
    for root, dirs, files in os.walk("."):
        file_list.extend( join(root,f) for f in files )
    file_name_sorted = sorted(file_list)
    #file_sorted = sorted(file_list, key=getsize)
    #time.strftime("%m/%d/%Y %I:%M:%S %p" ,time.localtime(os.path.getmtime(file)))
    f = open(self.config.Client_Local_Status(),'wb')        
    for file_name in file_name_sorted:
        if (os.path.exists(file_name)):
            #f.write((str(os.path.getmtime(file_name)) + "|" + file_name + "\n").encode('utf-8'))
            pass
        else:
            print(file_name + "|" + str(len(file_name) + len(originalPath)) + "\n")
            print(os.path.getmtime(file_name))
            #f.write((str(os.path.getmtime(file_name)) + "|" + file_name + "\n").encode('utf-8'))
    f.close()
Run Code Online (Sandbox Code Playgroud)

由于该错误,os.path.getmtime(file_name)将引发未找到的异常文件.我怎样才能克服这个问题?我尝试使用//?/字符作为前缀,如中所示

http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

但是没有成功使用//?/ character.

我尝试使用os.path.getmtime("////?//"+ file_name)#Threw错误无效路径

请建议修复

aba*_*ert 8

这里的问题是你正在使用相对路径.该\\?\前缀只能适用于绝对路径.正如文件所说:

这些前缀不会用作路径本身的一部分.它们表明路径应该以最小的修改传递给系统,这意味着您不能使用正斜杠表示路径分隔符,或者表示当前目录的句点,或者表示父目录的双点.因为您不能将" \\?\"前缀与相对路径一起使用,所以相对路径始终限制为总共MAX_PATH个字符.

修复很简单.而不是这个:

'\\\\?\\' + file_name
Run Code Online (Sandbox Code Playgroud)

做这个:

'\\\\?\\' + os.path.abspath(file_name)
Run Code Online (Sandbox Code Playgroud)

你不能使用正斜杠.添加额外的反斜杠可能是合法的,也可能不合法,在这种情况下,你可以逃脱r'\\?\\'而不是加倍反斜杠.试试看看(但一定要测试像驱动器前缀的路径一样C:\foo和UNC路径一样\\server\share\bar)......但是上面的双反斜杠版本肯定会起作用.