在Python字符串中去除Excel文件中的奇怪双引号
我正在用xlrd把一个Excel文件加载到Python3中。这个文件基本上就是一个电子表格里的文本行。在这些行中,有些包含了引号。比如,有一行可能是:
她说:“我的名字是詹妮弗。”
当我把这些行读入Python并转换成字符串时,双引号被读成了一种奇怪的字符,看起来像是斜体的双引号。我猜是因为某个地方,Python把这个字符当成了外来的字符,而不是正常的双引号,这可能是编码问题导致的。所以在上面的例子中,如果我把那一行赋值给“text”,那么我们得到的结果可能像这样(虽然不完全一样,因为我没有实际输入那一行,所以想象一下“text”已经被赋值了):
text = 'She said, “My name is Jennifer.”'
text[10] == '"'
第二行会返回一个False,因为它似乎不把这个奇怪的双引号识别为正常的双引号。我是在Mac终端上操作的,不知道这是否有影响。
我想问的是: 1. 有没有简单的方法去掉这些奇怪的双引号? 2. 在读取文件时,有没有办法让Python正确识别它们为双引号?
1 个回答
我猜在某个环节,Python把这个字符当成了某种外来的字符。
没错;它之所以这样读取,是因为文件里的数据确实就是这样表示的。
而不是因为某种编码问题导致的真正的双引号。
编码没有问题。实际上这个字符并不是“真正的双引号”。
有没有简单的方法可以去掉这些奇怪的双引号?
你可以像平常一样使用字符串的.replace
方法,把它们替换成“真正的双引号”或者直接删除。
在读取文件时,有没有办法让Python正确识别它们为双引号?
如果你想识别它们,可以把它们和它们实际的字符进行比较。
正如评论中提到的,它们很可能是U+201C 左双引号和U+201D 右双引号。它们的设计是为了让开头和结尾的引号看起来不同(因为它们的弯曲方向不同),这在排版上是比较常见的做法(而不是使用"
,后者对程序员来说更方便)。在Python中,你可以用Unicode转义来表示它们,如下所示:
text[10] == '\u201c'
你也可以直接在Python命令行中询问Python这些信息,比如输入text[10]
(这样会计算并显示出它的表示),或者在脚本中明确地使用,比如print(repr(text[10]))
。