您的位置:首页 >如何在Python中按每10个文件为一组批量处理CSV文件
发布于2026-05-02 阅读(0)
扫一扫,手机访问

本文介绍在Google Colab等环境中,对有序命名的CSV文件(如M0000.csv–M0099.csv)进行分块处理的方法:将100个文件按每10个一组归并,每组读取全部文本内容并存入独立列表,最终构建包含10个子列表的all_text结构。
处理大批量有序文件时,一个常见的需求就是分组操作。比如,手头有从M0000.csv到M0099.csv整整100个文件,需要每10个文件归为一组,分别读取其中的全部文本内容。最终的目标,是得到一个名为all_text的列表,里面恰好包含10个子列表,每个子列表对应一组文件的全部文本。
听起来简单,但这里有个关键点需要特别注意:实现“每10个文件执行一次聚合操作”的核心,在于按序分组,而不是简单的条件触发。很多朋友第一反应可能会用文件序号取模(比如filenumber % 10 == 0),但这只能在第10、20、30个文件时触发某个动作,无法自然而优雅地构建出那个我们想要的、结构清晰的分组容器。更健壮、可读性也更高的做法,其实是利用整除运算来确定每个文件所属的组别索引,并动态地将其内容追加到对应的子列表里。
下面就是一个完整、即拿即用的解决方案,特别适配Google Colab和Google Drive的环境:
import glob
import pandas as pd
dir_path = 'drive/My Drive/Tri/'
all_text = [] # 最终结构:all_text[i] 是第i组(共10组)的文本列表
# 按文件名排序确保M0000.csv, M0001.csv, ..., M0099.csv顺序正确
file_list = sorted(glob.glob(dir_path + "M*.csv"))
# 遍历所有匹配文件,按每10个一组组织
for idx, file in enumerate(file_list):
# 计算当前文件属于第几组(0-indexed:0~9)
group_idx = idx // 10
# 确保 all_text 至少有 group_idx + 1 个空列表
if len(all_text) <= group_idx:
all_text.append([])
print(f"Processing {file} → Group {group_idx} (file #{idx + 1})")
try:
# 读取CSV文件全部行作为纯文本(忽略列解析,适配fwf格式)
df = pd.read_fwf(file, header=None, on_bad_lines='skip', delimiter="\n")
# 提取每行文本(去除NaN和空白),转为字符串列表
texts_in_file = [str(row.iloc[0]).strip() for _, row in df.iterrows() if not pd.isna(row.iloc[0])]
all_text[group_idx].extend(texts_in_file)
except Exception as e:
print(f"⚠️ Warning: Failed to process {file}: {e}")
# 验证结果
print(f"\n✅ Done! Generated {len(all_text)} groups.")
for i, group in enumerate(all_text):
print(f"Group {i}: {len(group)} text lines (files {i*10}–{i*10+9})")
那么,这段代码有哪些值得细品的要点和需要注意的地方呢?
idx // 10 是整个分组操作的灵魂。它使得序号0–9的文件归入第0组,10–19归入第1组,以此类推,直到90–99归入第9组。这完美契合了题目要求的10组结构,清晰又直接。all_text中添加新的空子列表。这样做的好处是避免了内存浪费,也防止了因文件数量不确定而可能出现的索引越界错误。pd.read_fwf(..., delimiter="\n")来读取文件。这种设置将每一行都视为一个独立的文本单元,完全符合“保存所有文本”的原始需求,尤其适合固定宽度格式或纯文本内容。file_list = file_list[:100]进行截断,这样可以确保最后一组不至于因为文件缺失而变得不完整。from google.colab import drive; drive.mount('/content/drive')。open()函数逐行读取,来替代pandas的DataFrame操作,这样可以省去一些不必要的开销。总的来说,这个方案结构清晰、鲁棒性强,既严格满足了all_text[0]到all_text[9]的索引需求,也为后续操作铺平了道路——无论是进行NLP清洗、文本向量化,还是批量保存,都可以非常方便地对每组文本进行统一处理。
立即学习“Python免费学习笔记(深入)”;
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9