【问题标题】:Why is Python re.search adding spaces to my string?为什么 Python re.search 在我的字符串中添加空格?
【发布时间】:2014-03-20 19:17:42
【问题描述】:

我希望 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)

【问题讨论】:

  • 检查文件的编码。
  • 我做了,输入文件保存为Unicode文本文件。
  • 好吧,我正在将记事本保存为 Unicode。 Here 是输入文件。
  • Here 是我得到的输出文件。谢谢您的帮助!如果这是一个编码问题,有什么解决方法的建议吗?
  • 我在 Windows 7 上使用 Python 3.3.3。

标签: python regex search


【解决方案1】:

这是一个艰难的过程,但这似乎行得通。

首先,正如我们已经在 cmets 中讨论过的,这是一个编码问题。事实上,search不能在字符串中添加空格,因为字符串是不可变的,所以更改line 的唯一方法是执行line = ... 之类的操作。

您在 cmets 中链接的输入文件编码为 UTF-16-LE,这不是 Python 使用的默认格式。阅读它的一种方法(可能还有其他方法,请随时发表评论)是使用 codecs 模块。

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

要将选定的行写入输出文件,您可以对 outfile 执行相同的操作,或者执行line = line.encode("utf8") 将行写入文件为utf8。 (由于某种原因,读取这些行同样不起作用,它导致了 unicode 错误。在这种情况下,不能 100% 确定从 UTF16 到 UTF8 的编码是无损的;再次,请随时发表评论。)

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

【讨论】:

  • 完美!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2020-04-30
  • 2016-04-26
  • 2014-12-11
  • 2020-11-25
  • 2020-07-15
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多