【问题标题】:Read file with weird windows path using python使用python读取具有奇怪Windows路径的文件
【发布时间】:2018-04-25 05:09:13
【问题描述】:

使用 Python 3

我有一个带有 Dropbox 备份的外部驱动器。我一直在使用 python 将文件从这个驱动器复制到另一个位置,方法是使用 os.walk 并遍历文件。 os.walk 将产生一个有效的文件夹和文件名。

W:\Z Drive Backup 4-14-18\Dropbox\Autodesk 2018 Win\file.xyz

但是,当使用openos.stat 时,它会给我一个FileNotFoundError

FileNotFoundError: [WinError 3] The system cannot find the path specified: 'W:/Z Drive Backup 4-14-18/Dropbox/Autodesk 2018 Win

打开文件属性,它会显示前面带有\\?\ 的位置。见照片。如果我将它添加到文件路径,我仍然会得到同样的错误。

我在执行此操作时遇到了很多文件夹和文件,这些文件夹和文件在路径中有时髦的 Unicode 或其他字符。我能够识别这些并用str.replace 替换其中大多数的坏字符。我认为\\?\前面的这个问题是同一类型的问题,但是,它甚至无法在python中看到文件让我重命名它。

任何想法如何修复文件路径?

如果我重命名该驱动器上的文件,它并不能解决问题。如果我将文件复制到另一个位置,那就没问题了。但是复制回来的时候有问题。有很多文件,所以我不想手动做任何事情。

【问题讨论】:

  • 看起来您在某处有多余或缺少的报价...
  • 您可能应该从屏幕截图中删除个人信息
  • 默认情况下,Windows 路径规范化模拟 MS-DOS 规则,例如将路径限制为 MAX_PATH (260) 个字符;将正斜杠翻译成反斜杠;保留 DOS 设备名称,例如“CON”和“NUL”;并从最终文件名组件中去除尾随空格和点。 “\\?\”路径前缀指示 Windows 绕过此规范化步骤。它只能与 UTF-16 Unicode 的完全限定路径一起使用(Python 3 str,但 Python 3.6+ 文件系统函数将 UTF-8 字节路径隐式解码为 UTF-16)并且仅使用反斜杠作为路径分隔符。

标签: python windows filepath filenotfoundexception os.walk


【解决方案1】:

从 Windows 10 版本 1607 开始,MAX_PATH 限制已从常见的 Win32 文件和目录函数中删除。但是,您必须选择加入新行为

要选择加入,请编辑注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled 为 1

参考资料: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 https://bugs.python.org/issue27731

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 2019-01-20
    • 2022-11-07
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2011-10-19
    相关资源
    最近更新 更多