【问题标题】:Python: using regex and a loop to clean mulitiple text filesPython:使用正则表达式和循环清除多个文本文件
【发布时间】:2017-09-19 21:47:17
【问题描述】:

我正在清理存储在单独文本文件中的报纸文章。

在其中一个清理阶段,我想删除分隔符“LOAD-DATE:”之后的一个文件中的所有文本。我使用一小段代码,它只应用于一个字符串。见下文。

line = 'A little bit of text. LOAD-DATE: And some redundant text'

import re
m = re.match('(.*LOAD-DATE:)', line)
if m:
    line = m.group(1)
    line = re.sub('LOAD-DATE:', '', line)   
    print(line)   

一点点文字。

但是,当我将代码转换为循环以清理一大堆单独的文本文件(在脚本的其他阶段可以正常工作)时,它会生成巨大的、相同的文本文件,这些文件根本看不出来就像原来的报纸文章一样。见循环:

files = glob.glob("*.txt")

for f in files:
    with open(f, "r") as fin: 
        try:
            import re
            m = re.match('(.*LOAD-DATE:)', fin)
            if m:
                data = m.group(1)
                data = re.sub('LOAD-DATE:', '', data)   
        except:
            pass

    with open(f, 'w') as fout:
        fout.writelines(data) 

循环中显然出了点问题,但我不知道是什么。

【问题讨论】:

  • 你能生成保存数据的示例输出吗?
  • 这里发生了很多事情,但请注意,您实际上从未阅读过打开的文件:m = re.match('(.*LOAD-DATE:)', fin) --> m = re.match('(.*LOAD-DATE:)', fin.read())

标签: python regex file text


【解决方案1】:

尝试逐行浏览文件。类似的东西

import re

files = glob.glob("*.txt")

for f in files:
    with open(f, "r") as fin:
        data = []

        for line in fin:
            m = re.match('(.*LOAD-DATE:)', line)
            if m:
                line = m.group(1)
                line = re.sub('LOAD-DATE:', '', line)
            data.append(line)

    with open(f, 'w') as fout:
        fout.writelines(data)

【讨论】:

  • 谢谢安德鲁,这完全完成了工作。我还设法在这个循环中实现了各种其他正则表达式,这大大改善了我的数据清理。
【解决方案2】:

我制作了 10 个 txt 文件,都包含该字符串:

 A little bit of text. LOAD-DATE: And some redundant text

我按照 patrick 的建议更改了 m 变量,以允许打开和读取文件。

   m = re.match('(.*LOAD-DATE:)', fin.read())

但我也发现我必须在 if 语句中包含 writelines

        if m:
            data = m.group(1)
            data = re.sub('LOAD-DATE:', '', data)   
            with open(f, 'w') as fout:
                fout.writelines(data) 

这一切都没有问题,而且速度很快。

我希望这会有所帮助。

【讨论】:

  • 谢谢约翰,我认为这段代码应该可以工作,但由于某种原因,我没有在现有循环中很好地实现它。但是,最佳解决方案有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2014-01-19
  • 2021-06-07
  • 2021-04-18
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多