使用re.sub删除双引号

时间:2015-04-02 04:07:36

标签: python replace

我正在尝试从Python中的文本文件中删除双引号。语句print re.sub(r'"', '', line)在解释器中起作用,但在我在文件中使用时则不起作用。为什么会这样?

直接从口译员那里:

>>> 
>>> import re  
>>> str = "bill"  
>>> print re.sub(r'"', '', str)  
bill
>>> 

来自我的.py文件:

def remove_quotes (filename):  
    with open(filename, 'rU') as file:  
        print re.sub(r'"', '', file.read())  

输出:

“Bill”  
“pretty good”       bastante bien  

“friendship”        amistad  
 “teenager”     adolescent

好吧,正如col6y指出的那样,我正在处理花哨的L / R报价。试图摆脱它们:

>>> line  
'\xe2\x80\x9cBill\xe2\x80\x9d\n'  
text = line.replace(u'\xe2\x80\x9c', '')  
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)  

尝试了另一个字符编码:

  
    
      

text = line.replace(u" \ u201c",'')
          UnicodeDecodeError:' ascii'编解码器不能解码位置0中的字节0xe2:序数不在范围内(128)

    
  

1 个答案:

答案 0 :(得分:1)

在您的翻译示例中,您说:

>>> 
>>> import re  
>>> str = "bill"  
>>> print re.sub(r'"', '', str)  
bill
>>> 

但是,字符串"bill"不包含任何引号,因此不会测试任何内容。如果你试试print str,你会发现它从来没有引号 - 这是因为引号标记str是一个字符串,因此不包括在内。 (您不一定总是需要字符串中的引号。)如果您想要包含引号,可以说"\"bill\""'"bill"'

但是,这并不能解释您的其他计划中的实际问题。要理解这一点,请注意"之间的区别。它们看起来很相似,但它们略有不同,并且与计算机完全不同。在您的文件中,您有,但您正在替换"。你也想替换其他两个。

另外,正如@MikeT指出的那样,使用file.read().replace(...)代替re.replace(..., file.read())会更容易。 re.replace用于正则表达式,但您不需要它们的力量。

您还应注意file.read()只会读取文件的一部分,而不是整个文件。为此,请考虑使用file.readlines(),并迭代这些行。