Skip to main content
 首页 » 编程设计

python之正则表达式删除 csv 文件中的空格,用引号分隔文本

2024年08月28日29zlslch

我是编程和正则表达式的新手,阅读了精通正则表达式,但我找不到如何摆脱制表符、换行符和奇怪的非单词或非数字字符(图标和奇怪的非我的 tsv 文件的文本列中的西方换行符(?)主要是)。它采用 utf-8 格式,采用瑞典语。

看起来像这样:

"from_user","month","full_text" 
"bellaboo",4,"RT @BodilMalmsten: \"om man klarar av att föra ett bestick till munnen eller      behöver hjälp på toaletten\" 
Have a heart, borgarrådet 
Have a hea,RT @BodilMalmsten: Borgarrådet om riktlinjerna \"om man klarar av att föra ett   bestick till munnen eller behöver hjälp på toaletten\" 
Hjälp 
1   min dröm 
2   allas önskningar 
3   viljan att segra 
H,RT @BodilMalmsten: Klarar du av att föra ett bestick till munnen eller behöver hjälp på  toaletten? 
http://t.co/fcvcf0U2dW" 

任何人都可以帮助我,以便我继续进行我真正要对这个文件进行的文本分析吗?

请您参考如下方法:

由于您使用 python-3.x 标记了问题,因此这里是 Python 3.x 答案。

我认为您遇到的问题是 CSV 阅读器会对第三列中的所有换行符感到不安。该程序去除所有额外的换行符并规范化所有空白(单词由一个空格分隔)。

我正在使用带有注释的“详细”Python 模式,以明确它如何与列匹配。棘手的是第三个,它可以包含换行符。它只匹配任何内容,直到看到终止双引号。

我不确定您想如何清理字符串;我给出的模式只是替换了所有“控制字符”(ASCII 0x01 到 0x1f,包括 ASCII DEL 字符 0x7f) 带空格。然后空白规范化会清除任何额外的空格。

import re 
import sys 
 
_, infile, outfile = sys.argv 
 
s_pat_row = r''' 
    "([^"]+)"  # match column; this is group 1 
    \s*,\s*  # match separating comma and any optional white space 
    (\S+)  # match column; this is group 2 
    \s*,\s*  # match separating comma and any optional white space 
    "((?:\\"|[^"])*)"  # match string data that can include escaped quotes 
''' 
pat_row = re.compile(s_pat_row, re.MULTILINE|re.VERBOSE) 
 
s_pat_clean = r'''[\x01-\x1f\x7f]''' 
pat_clean = re.compile(s_pat_clean) 
 
row_template = '"{}",{},"{}"\n' 
 
with open(infile, "rt") as inf, open(outfile, "wt") as outf: 
    data = inf.read() 
    for m in re.finditer(pat_row, data): 
        row = m.groups() 
        cleaned = re.sub(pat_clean, ' ', row[2]) 
        words = cleaned.split() 
        cleaned = ' '.join(words) 
        outrow = row_template.format(row[0], row[1], cleaned) 
        outf.write(outrow) 

您可以编辑 s_pat_clean 中指定的模式来清理任何需要清理的字符。

要使用它,请将其保存在名为 cleaner.py 的文件中,并将您的输入放入名为 data.txt 的文件中,然后运行:

python3 cleaner.py data.txt cleaned.txt 

结果保存在输出文件 cleaned.txt 中。

在您提供的示例上运行此命令的结果:

"from_user","month","full_text" 
"bellaboo",4,"RT @BodilMalmsten: \"om man klarar av att föra ett bestick till munnen eller behöver hjälp på toaletten\"Have a heart, borgarrådet Have a hea,RT @BodilMalmsten: Borgarrådet om riktlinjerna \"om man klarar av att föra ett bestick till munnen eller behöver hjälp på toaletten\" Hjälp 1 min dröm 2 allas önskningar 3 viljan att segra H,RT @BodilMalmsten: Klarar du av att föra ett bestick till munnen eller behöver hjälp på toaletten? http://t.co/fcvcf0U2dW" 

现在 CSV 阅读器在解析文件时应该没有问题。

编辑:使用正确的输入重新运行程序,并将输出示例替换为在正确的输入上运行的结果。当输入有重音符号时,它们会正确传递,如上所示。