错误“(unicode 错误)'unicodeescape' 编解码器无法解码位置 2-3 中的字节:截断 \UXXXXXXXX 转义”[重复]

Error "(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape" [duplicate]

提问人:Miesje 提问时间:5/24/2016 最后编辑:Donald DuckMiesje 更新时间:10/26/2022 访问量:2726337

问:

我正在尝试将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 错误)“unicodeescape”编解码器无法解码字节 在位置 2-3:截断 \UXXXXXXXX 转义

我试图替换 with 或 with,我试着放一个 before ,但所有这些东西都没有用。\\\/r"C..

python csv unicode 语法错误

评论

12赞 Blckknght 5/24/2016
您的替代解决方案为什么不起作用?我希望原始字符串或带有 's 而不是 '\''s 的字符串都能正常工作。/
0赞 Miesje 5/24/2016
当我使用双反斜杠时,程序说我要打开的文件不存在。
1赞 Praveen Kumar C 12/2/2020
使用“\”正斜杠而不是反斜杠,同时指定路径 C:/Users/user/Videos 更改为 C:\Users\user\Videos
0赞 gseattle 1/11/2023
这是 Python 错误,因为它也发生在多行注释中(至少对 v3.7 是正确的),因为 Python 不需要仔细检查注释中的任何文本来查找任何编码来操作,不是吗?

答:

117赞 thomasrutter 5/24/2016 #1

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

要解决此问题,您需要对字符串中的反斜杠进行转义。执行此操作的直接方法是将反斜杠加倍:

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

如果您不想在字符串中转义反斜杠,并且不需要在字符串中使用转义码或引号,则可以改用“raw”字符串,在其前面使用“r”,如下所示:

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

评论

2赞 Miesje 5/24/2016
当我使用双反斜杠时,程序说我要打开的文件不存在。
3赞 thomasrutter 5/24/2016
这听起来很有希望,因为这意味着它现在认为字符串是有效的
2赞 bobince 5/25/2016
右。所以下一个问题是,该文件路径不存在。您是否省略了文件扩展名,例如 ?默认情况下,Windows 资源管理器会向您隐藏文件扩展名,因为它很愚蠢;不过你可以修复它vektis_agb_zorgverlener.txt
51赞 Mohit Solanki 2/18/2017 #2

你可以把你的实际路径放在字符串的前面,它表示一个原始字符串。例如:r

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

评论

2赞 thomasrutter 2/12/2020
为了完整起见,这删除了在字符串中转义字符(包括引号)的功能,因此它根本不能用于包含引号的字符串,但在这里完全合适。
1赞 G4W 8/15/2017 #3

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

863赞 Techie 9/2/2017 #4

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

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")

评论

29赞 Yu Shen 4/25/2018
我喜欢第二个选项,它使路径可以跨 Windows 和 Linux 移植。感谢 Python 屏蔽了 Windows 的特殊性。
4赞 Samuel Nde 8/26/2018
谢谢伙计。第一个答案解决了我的问题。我所做的只是添加 r 以使我的字符串原始。
0赞 Feri 8/26/2018
就我而言,在第一个\之前只有一个\有效:C:\\Users\DeePak\Desktop...
0赞 xgg 11/20/2018
当文件路径为 C 时,这似乎是一个问题,使用其他字母在使用 Windows 样式“\”时不会出现问题
2赞 BigData-Guru 8/16/2020
即使使用所有这些选项,它也可能不起作用。请检查您的文件夹和文件权限是否为只读。我有同样的问题。我改变了同样的,它起作用了
9赞 Subhashi 12/12/2017 #5

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

例如:

  white = pd.read_csv(r"C:\Users\hydro\a.csv")
4赞 vinod 3/20/2018 #6

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

评论

0赞 Peter Mortensen 9/17/2022
使用单引号中和?
25赞 Ibrahim Isa 5/19/2018 #7

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

评论

3赞 ayat ullah sony 9/27/2019
它有效 !您能说出为什么驱动器后的双斜杠起作用吗?
0赞 lonstar 4/24/2023
我认为这是因为 \Users 中的 \U 被解析器视为“这里有一些 Unicode”,并且解析器在未提供任何内容时会感到难过。您需要在任何地方 \\U,例如在 c:\notusers\\Users 中也是如此。
14赞 undetected Selenium 10/23/2018 #8

根据 String 字面量

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

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

在三引号字符串中,允许使用未转义的换行符和引号,但一行中的三个未转义引号终止字符串

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

因此,理想情况下,您需要更换以下行:

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

到以下任一字符:

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

      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")
    

评论

2赞 snakecharmerb 4/28/2019
我不明白你为什么要在这里区分单引号和双引号?Python 以相同的方式处理它们。
41赞 Ramineni Ravi Teja 2/27/2019 #9

将其视为原始字符串。作为一个简单的答案,在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)
16赞 Farshad Javid 11/12/2019 #10

在字符串之前添加。它将普通字符串转换为原始字符串。r

评论

0赞 user10186832 3/15/2023
在 Windows 上使用 Python 中的 Excel...为我工作。最简单的答案。xl.Workbooks.Open(Filename=r"C:\Users\david\Desktop\xl_HW.xlsm",ReadOnly=1)