商城首页欢迎来到中国正版软件门户

您的位置:首页 >如何在Python中按每10个文件为一组批量处理CSV文件

如何在Python中按每10个文件为一组批量处理CSV文件

  发布于2026-05-02 阅读(0)

扫一扫,手机访问

如何在Python中按每10个文件为一组批量处理CSV文件

如何在Python中按每10个文件为一组批量处理CSV文件

本文介绍在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")来读取文件。这种设置将每一行都视为一个独立的文本单元,完全符合“保存所有文本”的原始需求,尤其适合固定宽度格式或纯文本内容。
  • 边界情况处理:如果实际文件数量不足100个,建议在循环开始前用file_list = file_list[:100]进行截断,这样可以确保最后一组不至于因为文件缺失而变得不完整。
  • 环境准备:在Google Colab中运行前,别忘了先挂载Google Drive,执行from google.colab import drive; drive.mount('/content/drive')
  • 性能优化提示:如果处理的文件特别大,追求更高性能的话,可以考虑用Python原生的open()函数逐行读取,来替代pandas的DataFrame操作,这样可以省去一些不必要的开销。

总的来说,这个方案结构清晰、鲁棒性强,既严格满足了all_text[0]all_text[9]的索引需求,也为后续操作铺平了道路——无论是进行NLP清洗、文本向量化,还是批量保存,都可以非常方便地对每组文本进行统一处理。

立即学习“Python免费学习笔记(深入)”;

本文转载于:https://www.php.cn/faq/2312528.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注