在Python中清理多个文件的文本

时间:2018-05-19 16:30:12

标签: python csv text multiple-files

我正在编写一个脚本来清理.txt文件,创建列表,计算唯一字的频率,并输出带有频率的.csv文件。我想打开多个文件并将它们组合起来仍然输出一个.csv文件。

编写将首先在.txt文件中组合文本的代码或者读取/清除所有唯一文件并在之后组合列表/词典会更高效吗?最佳方案的语法是什么样的?

我一直在尝试自己研究它,但编码技巧非常有限,似乎无法找到适合我特定问题的答案。我感谢任何和所有的投入。谢谢!

import re

filename = 'testtext.txt'
file = open(filename, 'rt')
text = file.read()
file.close()

import re
words = re.split(r'\W+', text)

words = [word.lower() for word in words]

import string
table = str.maketrans('', '', string.punctuation)
stripped = [w.translate(table) for w in words]

from collections import Counter

countlist = Counter(stripped)

import csv

w = csv.writer(open("testtext.csv", "w"))
for key, val in countlist.items():
    w.writerow([key, val])

2 个答案:

答案 0 :(得分:0)

如果你需要计算频率,最好先组合来自多个.txt文件的字符串,以了解性能,你可以在处理的开始和结束时编写日期时间函数。

答案 1 :(得分:0)

如果您想计算多个文件的单词频率并将其输出到一个CSV文件中,您就不需要对代码做太多工作,只需在代码中添加一个循环,例如:

import re
import string
from collections import Counter
import csv

files = ['testtext.txt', 'testtext2.txt', 'testtext3']
stripped = []

for filename in files:
    file = open(filename, 'rt')
    text = file.read()
    file.close()

    words = re.split(r'\W+', text)

    words = [word.lower() for word in words]

    table = str.maketrans('', '', string.punctuation)
    stripped += [w.translate(table) for w in words]  # concatenating parsed data

countlist = Counter(stripped)

w = csv.writer(open("testtext.csv", "w"))
for key, val in countlist.items():
    w.writerow([key, val])

我不知道这是否是最佳的做法 这将取决于以下因素:文件有多大?你要解析多少个文件?以及您希望解析x大小y个文件的频率?等等 当你想到这一点时,你就可以开始考虑如何优化这个过程。