【问题标题】:Error 123: os.remove on files with special characters错误 123:os.remove 对带有特殊字符的文件
【发布时间】:2016-03-08 13:06:33
【问题描述】:

我正在尝试在 Windows 上使用 Python 中的 rmtree() 删除一些文件夹。命令失败并出现以下错误:

File "C:\Miniconda\lib\shutil.py", line 247, in rmtree rmtree(fullname, ignore_errors, onerror)
File "C:\Miniconda\lib\shutil.py", line 252, in rmtree onerror(os.remove, fullname, sys.exc_info()) 
File "C:\Miniconda\lib\shutil.py", line 250, in rmtree os.remove(fullname)

WindowsError: [Error 123] Die Syntax f³r den Dateinamen, Verzeichnisnamen oder die Datentrõgerbezeichnung ist falsch: 'c:\\users\\user\\appdata\\local\\temp\\tmpsh6uwz\\uClibc-.9.32\\test\\API\\pthread-RPP?TPP.SUSv4.syms'
Exception WindowsError: WindowsError(123, 'Die Syntax f\xfcr den Dateinamen, Verzeichnisnamen oder die Datentr\xe4gerbezeichnung ist falsch') in <bound method TempDir.__del__ of <tempdir.TempDir object at 0x0000000014B301D0>> ignored

错误基本上说,文件名包含 Windows 下不允许的特殊字符。那是真实的。

我怎样才能删除这些文件?

【问题讨论】:

  • 传递 Unicode 文件名,看看是否有帮助。你的 Python 版本是多少?
  • @J.F.Sebastian,如果报告WindowsError,则Python的版本早于3.3,所以它可能是Python 2.7。这意味着你可能是对的。使用字节字符串列出目录会导致 ANSI 转换,将未映射的 Unicode 字符替换为“?”。 Windows 上唯一明智的选择是确保所有文件路径都是 Unicode,因为文件系统编码是 Unicode。
  • @eryksun 请不要将 Unicode 称为“编码”。在 Python 中:unicode_text = bytestring.decode(character_encoding)。 Unicode 不是字符编码(Unicode 字符串在内部如何表示与定义无关)
  • @eryksun :API 是 Unicode:不管它是如何实现的(出于定义的目的):Unicode 不是一种编码(无论某些 Windows 编辑器可能会说什么),别这么说。
  • @FerrisGarden,Python 3 中的字符串文字是 Unicode,所以最终传递给 os.listdir 的字符串是 Unicode。这将返回一个 Unicode 文件列表(来自 WinAPI Unicode API FindFirstFileWFindNextFileW),用于使用 Unicode API DeleteFileWRemoveDirectoryW 删除文件和目录。一切都保持 Unicode,这避免了与系统的 ANSI 代码页之间的有损转换。在 Python 2 中,您必须小心以 u'' 前缀的 Unicode 文字开头。

标签: python windows python-2.7


【解决方案1】:

因此,仅将这些 cmets / 解决方案总结在一行中,供像我这样的其他读者使用:

shutil.rmtree(unicode(path))

解决问题。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2018-04-26
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多