【Python】把txt里的英语单词按照出现次数排序并生成csv文件,次数相同按单词的md5值排序

说明

需求:把txt里的英语单词按照出现次数排序并生成csv文件,次数相同按单词的md5值排序
Python版本:3.10
Pycharm版本:PyCharm 2022.2.3 (Community Edition)
用到的包:csv, hashlib, pandas

开始实现

步骤1:读取txt文件,使用使用空格分词,得到单词列表 (如果有其他特殊符号,可以继续使用replace()函数替换,暂时没有想到其他更好的方法,欢迎各位多多指教

# 使用with open读取txt文本中的内容,txt_file_path是txt文本的路径
with open(txt_file_path, 'r', encoding='utf-8') as f:
    txt_data = f.read()
# 把文本中的符号替换成空格
word_list = txt_data.replace('\n', ' ').replace(',', ' ').replace('.', ' ').split()

步骤2:统计每个单词出现的次数,保存在字典里 (字典的结构:{"单词1": 次数1, "单词2": 次数2}

# 统计单词次数
word_count = {}
for word in word_list:
    if word in word_count:
    	# 如果字典中存在本次遍历的单词,则把对应的value值+1
        word_count[word] += 1
    else:
    	# 如果字典中不存在本次遍历的单词,则在字典中新增一个key-value
        word_count[word] = 1

步骤3:构建一个pandas的数据帧,用于下一步的排序

# 使用单词,频次,MD5值构建一个pandas的数据帧
data_frame = {'word': [], 'count': [], 'MD5': []}
for key, value in zip(word_count.keys(), word_count.values()):
    data_frame['word'].append(key)
    data_frame['count'].append(value)
    data_frame['MD5'].append(hashlib.md5(key.encode('utf-8')).hexdigest())

步骤4:使用pandas对数据进行分组、排序

如果有更好的方法欢迎留言分享,或者私信博主

data = pd.DataFrame(data_frame)
group_result = data.groupby(['count', 'MD5', 'word'])  # 根据次数和MD5分组,排序

步骤5:把pandas分组排序后的结果提取出来,保存到list中

# 构造保存到csv文件的数据
csv_data = []
for word_info in list(group_result):
    csv_data.append(word_info[0][::-1])	# 把排序后的结果提取出来存放到列表中

步骤6:把结果保存到csv文件中

# 结果写入csv文件(csv_file_path`是csv文件的路径)
with open(csv_file_path, 'w', encoding='utf-8', newline='') as f_w:
    writer = csv.writer(f_w)	# 构建一个写入csv文件的对象
    writer.writerow(['word', 'count', 'MD5'])	# 写入第一行标题
    writer.writerows(csv_data)	# 写入结果

完整代码 (欢迎大家留言讨论)

import csv
import hashlib

import pandas as pd

txt_file_path = 'source.txt'	# 更换为自己的txt路径
csv_file_path = 'return.csv'	# 更换为自己的csv路径

with open(txt_file_path, 'r', encoding='utf-8') as f:
    txt_data = f.read()
word_list = txt_data.replace('\n', ' ').replace(',', ' ').replace('.', ' ').split()

# 统计单词次数
word_count = {}
for word in word_list:
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1
print(word_count)

# 使用单词,频次,MD5值构建一个pandas的数据帧
data_frame = {'word': [], 'count': [], 'MD5': []}
for key, value in zip(word_count.keys(), word_count.values()):
    data_frame['word'].append(key)
    data_frame['count'].append(value)
    data_frame['MD5'].append(hashlib.md5(key.encode('utf-8')).hexdigest())

data = pd.DataFrame(data_frame)
group_result = data.groupby(['count', 'MD5', 'word'])  # 根据次数和MD5分组,排序

# 构造最终结果
csv_data = []
for word_info in list(group_result):
    csv_data.append(word_info[0][::-1])

# 最终结果写入csv
with open(csv_file_path, 'w', encoding='utf-8', newline='') as f_w:
    writer = csv.writer(f_w)
    writer.writerow(['word', 'count', 'MD5'])
    writer.writerows(csv_data)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值