Windows上的Python中的长路径

时间:2015-04-10 09:21:34

标签: python windows

在使用Windows运行的Python编程时遇到问题。我需要使用超过256或whatsathelimit字符的文件路径。 现在,我基本上阅读了两个解决方案:

  1. 使用kernel32.dll中的GetShortPathName并以这种方式访问​​该文件。
  2. 这很好,但我无法使用它,因为我需要以某种方式使用路径

    shutil.rmtree(short_path)
    

    其中short_path是一条非常短的路径(类似于D:\tools\Eclipse),长路径出现在目录本身(该死的Eclipse插件)。

    1. "\\\\?\\"添加到路径
    2. 我没有设法以任何方式完成这项工作。尝试以这种方式执行任何操作始终会导致错误WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: <path here>

      所以我的问题是:如何使第二个选项有效?我强调我需要以与选项#1中的示例相同的方式使用它。

      OR

      还有其他办法吗?

      编辑:我需要在Python 2.7中使用该解决方案

      EDIT2:问题Python long filename support broken in Windows确实给出了'魔术前缀'的答案,我说我在这个问题中知道了。我不知道的是我如何使用它。我已经尝试将其添加到路径中,但它只是失败了,正如我上面所写的那样。

3 个答案:

答案 0 :(得分:12)

好吧,似乎一如既往,在我认真询问有人之后,我已经找到了解决我一周二十分钟的问题的答案。

所以我发现我需要确保正确完成两件事:

  1. 路径只能包含反斜杠,不能包含正斜杠。
  2. 如果我想要列出一个目录,我需要用反斜杠结束路径,否则Python会向它追加/*.*,这是一个正斜杠,这很糟糕。
  3. 希望至少有人会觉得这很有用。

答案 1 :(得分:3)

让我为那些寻求直接答案的人简化一下:

  1. 路径必须是unicode,在字符串前加上u,例如u'C:\\path\\to\\file'
  2. 路径需要以\\\\?\\开头的\\?\(转义为u'\\\\?\\C:\\path\\to\\file')开头
  3. 没有正斜杠,只能有反斜杠:/-> \\
  4. 这必须是一条绝对的道路;它不适用于相对路径

答案 2 :(得分:1)

py 3.8.2

# Fix long path access:
import ntpath
ntpath.realpath = ntpath.abspath
# Fix long path access.

就我而言,这解决了从长路径运行脚本的问题。 (https://developers.google.com/drive/api/v3/quickstart/python) 但这不是通用解决方案。 看起来ntpath.realpath实现有问题。该代码将其替换为虚拟对象。