我有一个类似的文本文件并得到了很大的帮助来解决它,但我必须意识到我对一般的编程和regex来说太新了,特别是修改了steveha下面编写的优秀Python脚本对于Similar file。
编辑:我想摆脱标签,换行符和其他字符而不是“普通”字样,数字,感叹号,问号,圆点 - 以便获得干净的CSV并从那里做文本分析。
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)
我无法弄清楚如何修改它以匹配此文件,其中有\ t分隔列和文本而不是第二列中的数字。我的目标是让清理后的文本准备好进行内容分析,但在我熟悉之前,我似乎已经有了多年的学习......; - )
有人可以帮我修改它,以便它可以在下面的数据文件中使用吗?
"from_user" "to_user" "full_text" "_________erik_" "systersandra gigantarmadillo kuttersmycket NULL NULL" "\"men du...? är du bi?\". \"näeh. Tyvärr\" #fikarum,Alla vi barn i bullerbyn goes #swecrime. #fjällbackamorden,Ny mobil och en väckare som ringer 0540. #fail,När jag måste välja, \"äta kakan eller ha den kvar\", så carpe diar jag kakan på sekunden. #mums,Låter RT @bobhansson: Om pessimisterna lever 7 år kortare är det ju inte alls konstigt att dom är det. http://t.co/a1t5ht4l2h,Finskjortan på tork: Check! Dags att leta fram gå-bort skorna..."
答案 0 :(得分:0)
如果您的CSV文件使用制表符分隔符而不是逗号,那么在s_pat_row
中,您应该将,
个字符替换为\t
。此外,示例文本文件中的第二个字段包含空格,因此(\S+)
中的s_pat_row
模式将不匹配。你可以试试这个:
s_pat_row = r'''
"([^"]+)" # match column; this is group 1
\s*\t\s* # match separating tab and any optional white space
([^\t]+) # match a string of non-tab chars; this is group 2
\s*\t\s* # match separating tab and any optional white space
"((?:\\"|[^"])*)" # match string data that can include escaped quotes
'''
这可能足以解决您当前的问题。