【问题标题】:(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape [duplicate](unicode 错误)“unicodeescape”编解码器无法解码位置 2-3 中的字节:截断 \UXXXXXXXX 转义 [重复]
【发布时间】:2016-09-20 22:09:35
【问题描述】:

我正在尝试将 .csv 文件读入 Python (Spyder),但我不断收到错误消息。我的代码:

import csv

data = open("C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")
data = csv.reader(data)  
print(data)

我收到以下错误:

SyntaxError: (unicode error) 'unicodeescape' 编解码器无法解码字节 在位置 2-3:截断 \UXXXXXXXX 转义

我尝试将 \ 替换为 \ 或 / 并且我尝试在 "C.. 之前放置一个 r,但所有这些都不起作用。

【问题讨论】:

  • 您的替代解决方案如何不起作用?我希望原始字符串或带有 /'s 而不是 `\`'s 的字符串可以正常工作。
  • 当我使用双反斜杠时,程序说我要打开的文件不存在。
  • 在指定路径 C:/Users/user/Videos 更改为 C:\Users\user\Videos 时使用 '\' 正斜杠而不是反斜杠

标签: python csv unicode syntax-error


【解决方案1】:

出现此错误是因为您使用普通字符串作为路径。您可以使用以下三种解决方案之一来解决您的问题:

1:只需将r 放在普通字符串之前,它就会将普通字符串转换为原始字符串:

pandas.read_csv(r"C:\Users\DeePak\Desktop\myac.csv")

2:

pandas.read_csv("C:/Users/DeePak/Desktop/myac.csv")

3:

pandas.read_csv("C:\\Users\\DeePak\\Desktop\\myac.csv")

【讨论】:

  • 我喜欢第二个选项,它使路径可以跨 Windows 和 Linux 移植。感谢 Python 屏蔽了 Windows 的特殊性。
  • 谢谢伙计。第一个答案解决了我的问题。我所做的只是添加 r 以使我的字符串原始。
  • 在我的情况下,在第一个 \ 之前只有一个 \ 工作:C:\\Users\DeePak\Desktop...
  • 即使使用所有这些选项,它也可能不起作用。请检查您的文件夹和文件权限以及它是否是只读的。我遇到过同样的问题。我改变了同样的,它工作了
  • 非常有帮助。感谢分享。
【解决方案2】:

将其视为原始字符串。只是简单的回答,在你的 windows 路径前添加r

import csv
data = open(r"C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")
data = csv.reader(data)  
print(data)

【讨论】:

    【解决方案3】:

    r放在你的字符串之前,它将普通字符串转换为原始字符串

    【讨论】:

      【解决方案4】:

      根据String literals

      字符串文字可以用单引号(即'...')或双引号(即"...")括起来。它们也可以用三个单引号或双引号组成的匹配组括起来(这些通常称为三引号字符串)。

      反斜杠字符(即\)用于转义具有特殊含义的字符,例如换行符、反斜杠本身或引号字符。字符串文字可以选择以字母rR 作为前缀。此类字符串称为原始字符串,并且对反斜杠转义序列使用不同的规则。

      三引号字符串中,未转义的换行符引号是允许的,除了三个未转义的引号连续终止字符串。

      除非存在 rR 前缀,否则字符串中的转义序列将根据与标准 C 使用的规则类似的规则进行解释。

      所以理想情况下,您需要替换该行:

      data = open("C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")
      

      致以下任一字符:

      • 使用 raw 前缀和 单引号(即'...'):

          data = open(r'C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener')
        
      • 使用双引号(即"...")和转义反斜杠字符(即\):

          data = open("C:\\Users\\miche\\Documents\\school\\jaar2\\MIK\\2.6\\vektis_agb_zorgverlener")
        
      • 使用双引号(即"...")和正斜杠字符(即/):

          data = open("C:/Users/miche/Documents/school/jaar2/MIK/2.6/vektis_agb_zorgverlener")
        

      【讨论】:

      • 我不明白你为什么在这里区分单引号和双引号? Python 以相同的方式处理它们。
      【解决方案5】:

      尝试将文件路径写入"C:\\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener",即在驱动器后使用双反斜杠,而不是"C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener"

      【讨论】:

      • 它有效!你能告诉为什么驱动器后的双斜线有效吗?
      【解决方案6】:

      它通过 f = open('F:\\file.csv') 中和 '\' 对我有用

      【讨论】:

        【解决方案7】:

        只需在前面加上一个 r 就可以了。

        例如:

          white = pd.read_csv(r"C:\Users\hydro\a.csv")
        

        【讨论】:

          【解决方案8】:

          双 \ 应该适用于 Windows,但您仍然需要注意您在路径中提到的文件夹。所有这些(文件名除外)都必须存在。否则会报错。

          【讨论】:

            【解决方案9】:

            您可以将r 放在带有实际路径的字符串前面,这表示原始字符串。例如:

            data = open(r"C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")
            

            【讨论】:

            • 为了完整起见,这删除了在字符串中转义字符(包括引号)的能力,因此它根本不能用于包含引号的字符串,但在这里非常合适。跨度>
            【解决方案10】:

            字符串中的第一个反斜杠被解释为特殊字符,事实上,因为它后面跟着一个“U”,所以它被解释为 unicode 代码点的开头。

            要解决此问题,您需要转义字符串中的反斜杠。我不特别了解 Python,但我猜你是通过加倍反斜杠来做到的:

            data = open("C:\\Users\\miche\\Documents\\school\\jaar2\\MIK\\2.6\\vektis_agb_zorgverlener")
            

            【讨论】:

            • 当我使用双反斜杠时,程序说我要打开的文件不存在。
            • 这听起来很有希望,因为这意味着它现在认为字符串是有效的
            • 对。所以下一个问题是,该文件路径不存在。您是否省略了文件扩展名,例如vektis_agb_zorgverlener.txt?默认情况下,Windows 资源管理器会隐藏文件扩展名,因为它很愚蠢;不过你可以fix it
            猜你喜欢
            • 2022-11-02
            • 2020-01-06
            • 2021-03-05
            • 1970-01-01
            • 2023-03-05
            • 2016-11-03
            • 1970-01-01
            • 2021-05-17
            相关资源
            最近更新 更多