csv文件批量合并+词频Counter计算

本文介绍使用Python中的csv模块和pandas库进行CSV文件合并的方法。详细讲解了通过不同参数设置完成文件读写的过程,并给出了利用Counter进行词汇频率统计的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSV文件合并

版本一:只用csv

注意:写入文件时 参数ab表示写入文件的是二进制文件,具体是ab还是a要和前面读的r和rb有关

import csv

file = []
for i in range(2001,2022):
    f_i = '/Users/sunmengge/Desktop/scopus_content/content_%d.csv'%i
    file.append(f_i)
j = 2001
for k in file:  # 循环读取同文件夹下的csv文件
    fr = open(k, 'rb').read()
    temp = []
    temp.append(j)
    temp.append(fr)
    with open('/Users/sunmengge/Desktop/scopus_content/result.csv', 'ab') as f:   
        f.write(fr)
    j = j+1
print('合并完毕!')

这里,如果写入文件时为:f.writerow(),则括号内最好是列表

版本二:pandas

pandas不如csv好用 或者说csv的ab好用!
否则涉及文件中每列分割符号的问题

列表Counter计数

from collections import Counter

#构建词汇库
file=open(u'/Users/sunmengge/Desktop/scopus_content/scopus_fenci/fenci.csv','rb')
file_cont=file.readlines()
corpus1 = []
for text in file_cont:
    words=text.decode().strip().split('|')
    for word in list(set(words)):
        corpus1.append(word)
#自动计算每一词汇对应的频数!!
counter1 = Counter(corpus1)
##转化成字典形式
dic = dict(counter1)
##!!重点在于输出每一词汇对应的词频数 这也是字典形式应该掌握的语法
##str(terms[ind]) 为某词汇
for i,v in dic.items():
    if i ==str(terms[ind]):
        count = v

小tips:对列表a的去重为:list(set(a))

# -*- coding: utf-8 -*- """ Created on Fri Mar 7 14:15:19 2025 @author: SINmingsheng """ import os import chardet import hashlib import tkinter as tk from tkinter import filedialog, messagebox from lxml import etree from datetime import datetime from typing import Dict, Set, List class XMLMerger: """XML合并处理器""" NS = {'ns': 'http://www.bilibili.com/XMLSchema'} # B站命名空间 def __init__(self): self.dm_hashes: Set[str] = set() # 弹幕哈希集合 self.cid_map: Dict[str, int] = {} # CID出现频率统计 self.buffer: List[str] = [] # 弹幕缓冲池 self.total_count = 0 # 总弹幕数 self.processed_files = 0 # 已处理文件数 def process_files(self, file_paths: List[str]): """批量处理文件""" for path in file_paths: try: self._process_single_file(path) self.processed_files += 1 except Exception as e: print(f"文件处理失败 {path}: {str(e)}") continue def _process_single_file(self, file_path: str): """处理单个XML文件""" # 编码检测 with open(file_path, 'rb') as f: raw_data = f.read(1024) encoding = chardet.detect(raw_data)['encoding'] or 'utf-8' # 解析XML parser = etree.XMLParser(recover=True, encoding=encoding) tree = etree.parse(file_path, parser=parser) root = tree.getroot() # 提取元数据 self._collect_metadata(root) # 处理弹幕 dm_elements = root.xpath('//ns:d', namespaces=self.NS) self.total_count += len(dm_elements) for elem in dm_elements: self._process_danmaku(elem) def _collect_metadata(self, root): """收集CID信息""" cid_elements = root.xpath('//ns:chatid', namespaces=self.NS) if cid_elements: cid = cid_elements[0].text self.cid_map[cid] = self.cid_map.get(cid, 0) + 1 def _process_danmaku(self, element): 修改代码,实现对xml进行去重合并,jieba库进行分词后统计词频
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值