Python:使用正则表达式和循环来清理多个文本文件

时间:2017-09-19 21:47:17

标签: python regex file text

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

在其中一个清洁阶段,我想删除分隔符后面的一个文件中的所有文本' 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) 

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我制作了10个包含字符串的txt文件:

m

我更改了 m = re.match('(.*LOAD-DATE:)', fin.read()) 变量,因为patrick建议允许打开并阅读该文件。

writelines

但我也发现我必须在if语句中加入 if m: data = m.group(1) data = re.sub('LOAD-DATE:', '', data) with open(f, 'w') as fout: fout.writelines(data)

$ & 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

它很快就改变了它们。

我希望这会有所帮助。