使用法语口音时语法无效
invalid syntax when working with french accents
好吧,我正在尝试清理包含法语口音代码的文件:
#353= IFCPROPERTYSINGLEVALUE('Charge d''\X2[=10=]E9\X0\clairage sp\X2[=10=]E9\X0\cifi\X2[=10=]E9\X0\e par surface',$,IFCREAL(10.7639104167097),$);
我创建了这个小函数:
def CleanSpace(sp):
sp.replace("\X2[=11=]F4\X0\","ô")
sp.replace("\X2[=11=]E9\X0\","é")
return(sp)
但是 Python 3 给了我错误:
sp.replace("\X2[=12=]F4\X0\","ô")
^
SyntaxError: invalid syntax
请问我该如何解决?
提前致谢
编辑:如果有帮助,我宁愿在控制台中尝试这一行,但答案很奇怪:
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a='02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2[=13=]E9\X0\rapie'
>>> a
'02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2\x00E9\X0\rapie'
>>> a.replace('\X2[=13=]E9\X0\','é')
'02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2\x00E9\X0\rapie'
\ 字符转义了您的引号。这意味着 python 将继续下去,直到找到另一个引号来结束您的字符串。所以,实际上,您的字符串是 \X2[=11=]F4\X0\",
要解决此问题,请使用 \ 转义 \ 或完全删除最后一个。
新代码:
sp.replace("\X2[=10=]F4\X0\","ô")
当您将 \“
放入 python 字符串时,它会向字符串添加文字 ”
并且不会关闭它。以同样的方式,您可以编写 \‘
以获得单引号,或编写 \
以获得反斜杠。所以如果我想得到一个 Python 字符串说:
“Hi,”, said Bob \
我会在我的代码中写下:
“\“Hi,\“, said Bob \”
因为你写了 \" 而没有关闭它后面的字符串,它继续到下一行,把一切都搞砸了。
编辑:
此外,在控制台中,您并没有到处使用双反斜杠,因此它们偶尔会充当转义字符,从而导致出现奇怪的情况。每当您希望字符串在 Python 中包含反斜杠时,请编写 \
.
您的文本可能包含 \X2[=18=]F4\X0\
,但在 Python 字符串中 "\"
表示单个反斜杠,因此如果您将字符串文字中的每个反斜杠替换为双反斜杠 (不仅仅是最后一个),它应该可以工作,所以
a.replace('\X2\00E9\X0\','é')
例如。
好吧,经过大量的尝试和搜索,一行的解决方案是使用 raw-strings:
>>> a.replace(r'\X2[=10=]E9\X0\ '[:-1], 'é')
"#353= IFCPROPERTYSINGLEVALUE('Charge d''éclairage spécifiée par surface',$,IFCREAL(10.7639104167097),$);"
对于更多的行,它更难,因为我的文件中的字节已经写入,而不是因为我看到一个 '\' 它已经存在......
为我找到的解决方案是使用 antlr4
处理字节
好吧,我正在尝试清理包含法语口音代码的文件:
#353= IFCPROPERTYSINGLEVALUE('Charge d''\X2[=10=]E9\X0\clairage sp\X2[=10=]E9\X0\cifi\X2[=10=]E9\X0\e par surface',$,IFCREAL(10.7639104167097),$);
我创建了这个小函数:
def CleanSpace(sp):
sp.replace("\X2[=11=]F4\X0\","ô")
sp.replace("\X2[=11=]E9\X0\","é")
return(sp)
但是 Python 3 给了我错误:
sp.replace("\X2[=12=]F4\X0\","ô")
^
SyntaxError: invalid syntax
请问我该如何解决? 提前致谢
编辑:如果有帮助,我宁愿在控制台中尝试这一行,但答案很奇怪:
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a='02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2[=13=]E9\X0\rapie'
>>> a
'02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2\x00E9\X0\rapie'
>>> a.replace('\X2[=13=]E9\X0\','é')
'02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2\x00E9\X0\rapie'
\ 字符转义了您的引号。这意味着 python 将继续下去,直到找到另一个引号来结束您的字符串。所以,实际上,您的字符串是 \X2[=11=]F4\X0\",
要解决此问题,请使用 \ 转义 \ 或完全删除最后一个。
新代码:
sp.replace("\X2[=10=]F4\X0\","ô")
当您将 \“
放入 python 字符串时,它会向字符串添加文字 ”
并且不会关闭它。以同样的方式,您可以编写 \‘
以获得单引号,或编写 \
以获得反斜杠。所以如果我想得到一个 Python 字符串说:
“Hi,”, said Bob \
我会在我的代码中写下:
“\“Hi,\“, said Bob \”
因为你写了 \" 而没有关闭它后面的字符串,它继续到下一行,把一切都搞砸了。
编辑:
此外,在控制台中,您并没有到处使用双反斜杠,因此它们偶尔会充当转义字符,从而导致出现奇怪的情况。每当您希望字符串在 Python 中包含反斜杠时,请编写 \
.
您的文本可能包含 \X2[=18=]F4\X0\
,但在 Python 字符串中 "\"
表示单个反斜杠,因此如果您将字符串文字中的每个反斜杠替换为双反斜杠 (不仅仅是最后一个),它应该可以工作,所以
a.replace('\X2\00E9\X0\','é')
例如。
好吧,经过大量的尝试和搜索,一行的解决方案是使用 raw-strings:
>>> a.replace(r'\X2[=10=]E9\X0\ '[:-1], 'é')
"#353= IFCPROPERTYSINGLEVALUE('Charge d''éclairage spécifiée par surface',$,IFCREAL(10.7639104167097),$);"
对于更多的行,它更难,因为我的文件中的字节已经写入,而不是因为我看到一个 '\' 它已经存在...... 为我找到的解决方案是使用 antlr4
处理字节