You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取含多工作表的CSV文件筛选数据后生成同格式CSV

解决方案前提说明

首先明确:标准CSV格式本身不支持多工作表(Sheet)结构,你提到的「包含多个工作表的CSV文件」大概率是以下两类常见情况,对应不同的处理方案:

情况1:实际为多Sheet的Excel文件,仅后缀被误命名为.csv

这是最高频的场景,很多用户修改文件后缀名时误将.xlsx/.xls改成了.csv,导致pandas.ExcelReader读取时识别异常。
处理步骤如下:

  • 先改回文件原本的后缀(.xlsx或.xls),再使用pandas.ExcelFile读取多Sheet内容
  • 逐Sheet筛选数据后,直接按原Sheet结构写回新文件即可,示例代码:
import pandas as pd

# 读取多Sheet Excel文件
excel_file = pd.ExcelFile("修正后缀后的文件.xlsx")
# 获取所有Sheet名
sheet_names = excel_file.sheet_names
# 初始化写对象
writer = pd.ExcelWriter("筛选后的新文件.xlsx", engine="openpyxl")

for sheet in sheet_names:
    # 读取单个Sheet数据
    df = excel_file.parse(sheet)
    # 此处替换为你的自定义筛选逻辑,示例为筛选列A值大于10的行
    filtered_df = df[df["列A"] > 10]
    # 写入对应Sheet,保留原Sheet名
    filtered_df.to_excel(writer, sheet_name=sheet, index=False)

# 保存文件
writer.close()

如果需要输出CSV格式,每个Sheet对应生成一个独立的CSV文件即可,修改写入逻辑为filtered_df.to_csv(f"筛选后_{sheet}.csv", index=False)。

情况2:单个纯文本CSV文件内用特殊分隔符拆分了多块数据,被定义为多「Sheet」

这种场景下CSV文件内一般有明确的分隔标记(比如空行、特殊字符串标识不同Sheet的开头),处理逻辑如下:

  • 先用Python内置的csv模块按行读取整个文件,识别分隔标记拆分出不同「Sheet」的数据块
  • 逐块转换为DataFrame做筛选,再按原分隔规则拼接写回新的CSV文件即可,示例代码框架:
import csv
import pandas as pd

sheet_blocks = []
current_block = []
# 此处替换为你实际的Sheet分隔判断逻辑,示例为遇到空行就拆分新Sheet
with open("你的文件.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        if not row: # 空行作为Sheet分隔符
            if current_block:
                sheet_blocks.append(current_block)
                current_block = []
        else:
            current_block.append(row)
# 加入最后一个块
if current_block:
    sheet_blocks.append(current_block)

# 逐块筛选后写回
with open("筛选后的新文件.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    for idx, block in enumerate(sheet_blocks):
        # 转换为DataFrame,第一行为表头
        df = pd.DataFrame(block[1:], columns=block[0])
        # 自定义筛选逻辑
        filtered_df = df[df["筛选列"] == "目标值"]
        # 写回表头+数据
        writer.writerow(filtered_df.columns.tolist())
        writer.writerows(filtered_df.values.tolist())
        # 除了最后一个块,其他块末尾加分隔空行
        if idx != len(sheet_blocks) -1:
            writer.writerow([])

注意:如果你的需求是最终输出多Sheet的类Excel文件,直接输出xlsx格式即可,CSV本身无法承载多Sheet结构,不可能生成「多Sheet的CSV文件」。

内容的提问来源于stack exchange,提问作者Ashutosh Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:06:04