为什么Python re.search为我的字符串添加空格?

时间:2014-03-20 19:17:43

标签: python regex search

我希望Python打开一个Unicode文本文件,读取每一行,然后如果该行不包含任何数字,则将该行写入新的Unicode文本文件。所以如果输入是:

1
8:00:00 --> 8:00:01
Hello World!

应输出:

Hello World!

但我得到的是:

H e l l o  W o r l d !

我不确定为什么要添加每个角色之间的空格。我错过了什么?这是我正在使用的代码:

import re

nFile = open("NewFile.txt", 'w')

with open("OriginalFile.txt", 'r') as f:
    for line in f:
        if not (re.search("\d", line)):
            nFile.write(line)

1 个答案:

答案 0 :(得分:2)

这是一个艰难的,但这似乎有效。

首先,正如我们在评论中已经讨论的那样,这是一个编码问题。实际上,search 无法向字符串添加空格,即使它是这样的,因为字符串是不可变的,因此更改line的唯一方法是执行类似{ {1}}。

您在注释中链接的输入文件编码为line = ...,这不是Python使用的默认格式。阅读它的一种方法(可能有其他人,可以随意评论)是使用codecs模块。

UTF-16-LE

要将选定的行写入输出文件,您可以对outfile执行相同的操作,或执行import re, codecs with codecs.open("HarryPotterSubsEs2.txt", 'r', encoding="utf-16-le") as f: for line in f: if not (re.search("\d", line)): print line 将行写为line = line.encode("utf8")的文件。 (由于某种原因,同样的方法不适用于读取行,因此它会导致unicode错误。在这种情况下,不能100%确定从UTF16到UTF8的编码是无损的;再次,请随意发表评论。)

作为替代方案,您可能会找到一种方法来使用不同的编码保存文件(最好使用与记事本不同的文本编辑器utf8 ...