python合并两个txt列_Python 合并多个TXT文件并统计词频的实现

这篇博客介绍如何使用Python合并多个TXT文件并进行词频统计。首先,通过os模块遍历文件并合并到一个新文件中。接着,利用正则表达式处理文本,去除特殊字符,并统计单词出现次数。最后,展示了两种不同的词频统计方法,一种是自定义函数,另一种使用collections.Counter。示例代码在Windows 10和Python 3.7.4环境下运行成功。
摘要由CSDN通过智能技术生成

需求是:针对三篇英文文章进行分析,计算出现次数最多的 10 个单词

逻辑很清晰简单,不算难, 使用 python 读取多个 txt 文件,将文件的内容写入新的 txt 中,然后对新 txt 文件进行词频统计,得到最终结果。

代码如下:(在Windows 10,Python 3.7.4环境下运行通过)

# coding=utf-8

import re

import os

# 获取源文件夹的路径下的所有文件

sourceFileDir = 'D:\\Python\\txt\\'

filenames = os.listdir(sourceFileDir)

# 打开当前目录下的 result.txt 文件,如果没有则创建

# 文件也可以是其他类型的格式,如 result.js

file = open('D:\\Python\\result.txt', 'w')

# 遍历文件

for filename in filenames:

filepath = sourceFileDir+'\\'+filename

# 遍历单个文件,读取行数,写入内容

for line in open(filepath):

file.writelines(line)

file.write('\n')

# 关闭文件

file.close()

# 获取单词函数定义

def getTxt():

txt = open('result.txt').read()

txt = txt.lower()

txt = txt.replace(''', '\'')

# !"@#$%^&*()+,-./:;<=>?@[\\]_`~{|}

for ch in '!"'@#$%^&*()+,-/:;<=>?@[\\]_`~{|}':

txt.replace(ch, ' ')

return txt

# 1.获取单词

hamletTxt = getTxt()

# 2.切割为列表格式,'' 兼容符号错误情况,只保留英文单词

txtArr = re.findall('[a-z\''A-Z]+', hamletTxt)

# 3.去除所有遍历统计

counts = {}

for word in txtArr:

# 去掉一些常见无价值词

forbinArr = ['a.', 'the', 'a', 'i']

if word not in forbinArr:

counts[word] = counts.get(word, 0) + 1

# 4.转换格式,方便打印,将字典转换为列表,次数按从大到小排序

countsList = list(counts.items())

countsList.sort(key=lambda x: x[1], reverse=True)

# 5. 输出结果

for i in range(10):

word, count = countsList[i]

print('{0:<10}{1:>5}'.format(word, count))

效果如下图:

05ff4729df3b93e6faf45e7d567fc930.png

另一种更简单的统计词频的方法:

# coding=utf-8

from collections import Counter

# words 为读取到的结果 list

words = ['a', 'b' ,'a', 'c', 'v', '4', ',', 'w', 'y', 'y', 'u', 'y', 'r', 't', 'w']

wordCounter = Counter(words)

print(wordCounter.most_common(10))

# output: [('y', 3), ('a', 2), ('w', 2), ('b', 1), ('c', 1), ('v', 1), ('4', 1), (',', 1), ('u', 1), ('r', 1)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值