【问题标题】:"Unicode Error "unicodeescape" codec can't decode bytes... Cannot open text files in Python 3 [duplicate]“Unicode错误“unicodeescape”编解码器无法解码字节......无法在Python 3中打开文本文件[重复]
【发布时间】:2010-11-23 18:49:02
【问题描述】:

我在 Windows 7 机器上使用 Python 3.1。默认系统语言为俄语,默认编码为utf-8。

看着previous question 的答案,我尝试使用“编解码器”模块来给我一点运气。举几个例子:

>>> g = codecs.open("C:\Users\Eric\Desktop\beeline.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#39>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#40>, line 1)
>>> g = codecs.open("C:\Python31\Notes.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 11-12: malformed \N character escape (<pyshell#41>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#44>, line 1)

我的最后一个想法是,我认为这可能是因为 Windows 将一些文件夹(例如“users”文件夹)“翻译”成俄语(尽管输入“users”仍然是正确的路径),所以我在 Python31 文件夹中尝试过。尽管如此,还是没有运气。有什么想法吗?

【问题讨论】:

  • @Wahnfrieden 什么? Python 2 将在未来逐步淘汰,因此使用 Python 3 是有意义的,尽管它“缺乏”“成熟度”。
  • @Beau Martinez @orip(严重)缺乏库支持对于大多数情况来说是一个足够好的理由。将 Py3k 功能向后移植到 Python 2.6 和 2.7,以后移植到 3.x 无论如何都会很容易,而且您不会牺牲大量的库支持(如果您是新用户并且可以'没有正确地预测你想要哪些库)。
  • Python 3 默认字符串文字是 unicode 字符串,因此 \u 处于活动状态,因此字符串文字 '\ufoo' 引发 SyntaxError。在 Python 2 中,默认字符串文字不是 unicode 字符串,因此 \u 处于非活动状态,因此字符串文字 '\ufoo' 不会引发任何错误。相比之下,字符串文字 b'\ufoo' not 在 Python 3 中不会引发任何错误,而字符串文字 u'\ufoo' does 在 Python 2 中会引发错误。

标签: python unicode python-3.x


【解决方案1】:

问题出在字符串

"C:\Users\Eric\Desktop\beeline.txt"

这里,\U in "C:\Users... 开始一个八字符的 Unicode 转义,例如 \U00014321。在您的代码中,转义符后跟字符“s”,这是无效的。

您要么需要复制所有反斜杠:

"C:\\Users\\Eric\\Desktop\\beeline.txt"

或者在字符串前面加上r(生成原始字符串):

r"C:\Users\Eric\Desktop\beeline.txt"

【讨论】:

  • 在将 2.x 代码移植到 python3 时,我在函数文档字符串中发现了这个错误。
  • 当我在一段代码中使用三引号 ''' cmets 时遇到了这个错误,其中包含一个带有 \U 的原始字符串。 IE。在我尝试将其注释掉之前,该字符串没有给我一个错误。因此,可能首选双反斜杠方法。
  • 我在字符串前面加上 r,但它仍然给我错误。
  • 我有同样的错误,但我的字符串是一个变量。不可能在变量前加上“r”。我该如何解决这个问题?
  • 第三种解决方案(同样由@Adam Baylin Autuori 提出)是在路径中将'\'替换为'/'。 Python 将 '\'(Windows 风格)或 '/'(Unix 风格)都理解为目录分隔符。
【解决方案2】:

Windows 上的典型错误,因为默认用户目录是 C:\user\&lt;your_user&gt;,所以当您想将此路径作为字符串参数传递给 Python 函数时,您会收到 Unicode 错误,因为 \u 是 Unicode 转义.如果\u 后面的 8 个字符不是数字,则会产生错误。

要解决它,只需将反斜杠加倍:C:\\user\\&lt;\your_user&gt;... 这将确保 Python 将单个反斜杠视为单个反斜杠。

【讨论】:

    【解决方案3】:

    使用'r' 前缀效果很好,但需要使用正确的语法。例如:

    passwordFile = open(r'''C:\Users\Bob\SecretPasswordFile.txt''')
    

    这里不需要\\ - 保持可读性并且运行良好。

    【讨论】:

    • 三引号如何工作而不是双引号双单引号?我试过了,三重单引号就像一个魅力,但其他一切都失败了,你能解释一下吗
    【解决方案4】:

    使用 Python 3 我遇到了这个问题:

     self.path = 'T:\PythonScripts\Projects\Utilities'
    

    产生了这个错误:

     self.path = 'T:\PythonScripts\Projects\Utilities'
                ^
     SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
     position 25-26: truncated \UXXXXXXXX escape
    

    有效的解决方法是:

     self.path = r'T:\PythonScripts\Projects\Utilities'
    

    似乎 '\U' 产生了错误,并且字符串前面的 'r' 关闭了失败的八字符 Unicode 转义(对于原始字符串)。 (这有点过于简化了,但如果你不关心 unicode 也可以)

    希望这对某人有所帮助

    【讨论】:

    • 这不会在接受的答案上添加任何内容。
    【解决方案5】:

    或者您可以将路径中的“\”替换为“/”。

    【讨论】:

    • 我建议您使用tour 并访问help center。您的回答似乎不符合我们的质量标准。您需要详细说明为什么这会起作用,也许可以创建完整的代码示例。
    • 欢迎来到 Stack Overflow!请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为什么会解决问题的解释。大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
    【解决方案6】:
    路径 = pd.read_csv(**'C:\Users\mravi\Desktop\filename'**)

    错误是因为提到的路径

    在路径前添加'r'

    路径 = pd.read_csv(**r'C:\Users\mravi\Desktop\filename'**)

    这样就可以了。

    【讨论】:

      【解决方案7】:

      我在 python 3.2 中遇到了同样的错误。

      我有用于发送电子邮件的脚本,并且:

      csv.reader(open('work_dir\uslugi1.csv', newline='', encoding='utf-8'))
      

      当我删除文件 uslugi1.csv 中的第一个字符时工作正常。

      【讨论】:

      • 这将是一种解决方法,但上面列出了正确的答案。
      【解决方案8】:

      参考openpyxl文档,可以做如下修改。

      from openpyxl import Workbook
      from openpyxl.drawing.image import Image
      
      wb = Workbook()
      ws = wb.active
      ws['A1'] = 'Insert a xxx.PNG'
      # Reload an image
      img = Image(**r**'x:\xxx\xxx\xxx.png')
      # Insert to worksheet and anchor next to cells
      ws.add_image(img, 'A2')
      wb.save(**r**'x:\xxx\xxx.xlsx')
      

      【讨论】:

      • 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
      • 感谢@Deepika Anand,它的作品,请解释一下如何?谢谢
      • 参考官方文档页面:docs.python.org/2/howto/unicode.html。特别是“在 Python 源代码中,Unicode 文字被写成以 'u' 或 'U' 字符为前缀的字符串:u'abcdefghijk'。特定的代码点可以使用 \u 转义序列来编写,其后跟四个给出代码点的十六进制数字。\U 转义序列类似,但需要 8 个十六进制数字,而不是 4 个。"
      【解决方案9】:

      我遇到了同样的错误,只是卸载并再次安装了 numpy 包,它工作正常!

      【讨论】:

      • 这可能对您有用,并且可能对其他人有帮助,但是如果您能解释为什么这样做会很好,以便在重新安装方法失败时为其他人提供潜在可行的解决方案.不用担心,如果没有。在我学习的这个阶段,我不知道为什么在这种情况下重新安装 numpy 也有效。
      【解决方案10】:

      我遇到了这个错误。 我有一个主要的 python 脚本,它从另一个第二个 python 脚本调用函数。 在第一个脚本的末尾,我有一个用''' ''' 指定的注释块。 由于这个注释代码块,我收到了这个错误。 一旦我发现错误,我就重复了多次,以确保这是错误,并且确实如此。 我仍然不确定为什么。

      【讨论】:

        猜你喜欢
        • 2023-02-22
        • 2016-11-03
        • 2021-05-17
        • 2016-09-20
        • 2018-04-11
        • 2011-11-27
        • 2020-01-06
        • 1970-01-01
        相关资源
        最近更新 更多