使用法语口音时语法无效

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 时语法无效

语法错误:尝试在命令提示符中运行.py脚本时语法无效

使用python执行SQL查询时语法无效[关闭]

使用 eval(strClass) 时 Python 语法无效

在 kivy 样式文件中使用尖括号时,为啥我不断收到“无效语法”错误?