使用法语口音时语法无效
Posted
技术标签:
【中文标题】使用法语口音时语法无效【英文标题】:invalid syntax when working with french accents 【发布时间】:2018-09-20 05:10:48 【问题描述】:好吧,我正在尝试清理包含法语口音代码的文件:
#353= IFCPROPERTYSINGLEVALUE('Charge d''\X2\00E9\X0\clairage sp\X2\00E9\X0\cifi\X2\00E9\X0\e par surface',$,IFCREAL(10.7639104167097),$);
我创建了这个小函数:
def CleanSpace(sp):
sp.replace("\X2\00F4\X0\","ô")
sp.replace("\X2\00E9\X0\","é")
return(sp)
但是 Python 3 给了我错误:
sp.replace("\X2\00F4\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\00E9\X0\rapie'
>>> a
'02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\\X2\x00E9\\X0\rapie'
>>> a.replace('\X2\00E9\X0\\','é')
'02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\\X2\x00E9\\X0\rapie'
【问题讨论】:
问题是\"
在第一个参数的末尾 - 它将 " 解释为字符串的一部分,而不是关闭它。删除那个 `\`。着色应该给你提示.
另外,您不需要这样做,告诉它输入字符串是 unicode 转义,并且您想要生成一个 UTF-8 字符串。这样你就不需要弄清楚你让 Python 为你找出所有的 unicode 转义序列:) ***.com/questions/11375684/…
@kabanus:谢谢,是的,着色给了我一个疑问,但如果我放弃或加倍这个最后的 \,没有错误,但功能“替换”不起作用:我的打印始终包含 \X2\ 00E9\X0\...
@Rob:这个链接我看不懂,技术含量太高了
我不明白 - 你想获取一个常规字符串,并将其转换为适当的 unicode 字符吗? \X2\00F4\X0
和你写的符号是一回事,我不明白你在做什么。在任何情况下,您都必须删除最后的反斜杠,这完全是错误的,无论如何。
【参考方案1】:
\ 字符会转义您的引用。这意味着 python 将继续运行,直到找到另一个引号来结束您的字符串。因此,实际上,您的字符串是 \X2\00F4\X0\",
要解决此问题,请使用 \ 转义 \ 或完全删除最后一个。
新代码:
sp.replace("\X2\00F4\X0\\","ô")
【讨论】:
谢谢,着色给了我一个疑问,但如果我放弃或加倍这个最后的 \,没有错误但功能不起作用...... 试着像我的回答一样把它变成一个双反斜杠?还是不行? 'replace' 不起作用:我的打印件总是包含 \X2\00E9\X0\...sp.replace("\\X2\\00E9\\X0\\","é")
再好不过了:myline...lalala\X2\00E9\X0\itsboring【参考方案2】:
当您将\“
放入python 字符串时,它会在字符串中添加文字”
并且不会关闭它。以同样的方式,你可以写\‘
得到一个单引号,或者\\
得到一个反斜杠。所以如果我想得到一个 Python 字符串说:
“Hi,”, said Bob \
我会写在我的代码中:
“\“Hi,\“, said Bob \\”
因为你写了 \" 并且没有关闭它后面的字符串,它继续到下一行并且把所有东西都搞砸了。
编辑:
另外,在控制台中,您并没有在所有地方都使用双反斜杠,所以有时它们会充当转义字符,从而导致奇怪的事情发生。每当您希望字符串在 Python 中包含反斜杠时,请编写 \\
。
您的文本可能包含 \X2\00F4\X0\
,但在 Python 字符串中 "\\"
表示单个反斜杠,因此如果您将字符串文字中的每个反斜杠替换为双反斜杠(不仅仅是最后一个反斜杠),它应该可以工作,所以
a.replace('\\X2\\00E9\\X0\\','é')
例如。
【讨论】:
嗯,如前所述,使用 sp.replace("\X2\00F4\X0\\","ô") 没有更多错误,但 ô...中的文本没有更改... @Pim92 回答了你的问题(我认为)。【参考方案3】:好吧,经过大量尝试和搜索,一行的解决方案是使用raw-strings:
>>> a.replace(r'\X2\00E9\X0\ '[:-1], 'é')
"#353= IFCPROPERTYSINGLEVALUE('Charge d''éclairage spécifiée par surface',$,IFCREAL(10.7639104167097),$);"
对于更多行,这更困难,因为我的文件中的字节已经写入,而不是因为我看到它存在的“\”... 为我找到的解决方案是使用 antlr4 处理字节
【讨论】:
以上是关于使用法语口音时语法无效的主要内容,如果未能解决你的问题,请参考以下文章
当消息中有法语口音时,我的邮件功能返回成功并且未收到邮件[重复]
SyntaxError:使用 ArrayType 创建 DataFrame 时语法无效