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

Python将列表数据转为行格式写入Excel独立工作表

解决方案

要实现列表结构化展示+多工作表Excel输出,不需要改动你原有CSV读取、数据对比的核心逻辑,只需要补充控制台格式化打印、Excel写入模块即可。
首先安装依赖包,用于生成多sheet的xlsx文件:
pip install pandas openpyxl


完整可运行代码

代码保留你原有的全部对比逻辑,新增了结构化逐行打印、分类写入独立Excel工作表的功能:

import csv
import os
import sys
import pandas as pd

path_quarter_1 = os.path.join(sys.path[0], "Quarter_1.csv")  # Q1数据路径
path_quarter_2 = os.path.join(sys.path[0], "Quarter_2.csv")  # Q2数据路径
output_excel = os.path.join(sys.path[0], "季度数据对比结果.xlsx")  # 输出结果Excel路径

# 读取CSV数据
with open(path_quarter_1, "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    data_q1 = list(reader)

with open(path_quarter_2, "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    data_q2 = list(reader)

# 提取公共表头
table_header = data_q1[0]
account_col_header = ["Account"]

# ---------------------- 原有对比逻辑 开始 ----------------------
# 两季度同时存在的Account
account_in_both = []
for i in range(1, len(data_q1)):
    for j in range(1, len(data_q2)):
        if data_q1[i][2] == data_q2[j][2]:
            account_in_both.append(data_q1[i][2])

# 仅Q1存在的Account
account_in_q1_not_q2 = []
for i in range(1, len(data_q1)):
    if data_q1[i][2] not in account_in_both:
        account_in_q1_not_q2.append(data_q1[i][2])

# 仅Q2存在的Account
account_in_q2_not_q1 = []
for i in range(1, len(data_q2)):
    if data_q2[i][2] not in account_in_both:
        account_in_q2_not_q1.append(data_q2[i][2])

# 两季度完全一致的行
all_rows_are_same_in_both = []
for i in range(1, len(data_q1)):
    for j in range(1, len(data_q2)):
        if data_q1[i] == data_q2[j]:
            all_rows_are_same_in_both.append(data_q1[i])

# 仅Q1存在的行
rows_in_q1_not_q2 = []
for i in range(1, len(data_q1)):
    if data_q1[i] not in all_rows_are_same_in_both:
        rows_in_q1_not_q2.append(data_q1[i])

# 仅Q2存在的行
rows_in_q2_not_q1 = []
for i in range(1, len(data_q2)):
    if data_q2[i] not in all_rows_are_same_in_both:
        rows_in_q2_not_q1.append(data_q2[i])
# ---------------------- 原有对比逻辑 结束 ----------------------

# ---------------------- 新增:控制台结构化打印 开始 ----------------------
def print_formatted_result(title, data, is_full_row=False):
    print("="*80)
    print(f"【{title}】 共{len(data)}条记录")
    print("-"*80)
    # 打印表头
    if is_full_row:
        print("\t".join(table_header))
        print("-"*80)
    # 逐行打印数据
    for row in data:
        if is_full_row:
            print("\t".join(row))
        else:
            print(row)
    print("\n")

# 逐类打印结果
print_formatted_result("两季度同时存在的账号", account_in_both)
print_formatted_result("仅Q1存在的账号", account_in_q1_not_q2)
print_formatted_result("仅Q2存在的账号", account_in_q2_not_q1)
print_formatted_result("两季度完全一致的数据行", all_rows_are_same_in_both, is_full_row=True)
print_formatted_result("仅Q1存在的数据行", rows_in_q1_not_q2, is_full_row=True)
print_formatted_result("仅Q2存在的数据行", rows_in_q2_not_q1, is_full_row=True)
# ---------------------- 新增:控制台结构化打印 结束 ----------------------

# ---------------------- 新增:写入多工作表Excel 开始 ----------------------
with pd.ExcelWriter(output_excel, engine="openpyxl") as writer:
    # 账号类结果写入对应sheet
    pd.DataFrame(account_in_both, columns=account_col_header).to_excel(writer, sheet_name="两季度共有账号", index=False)
    pd.DataFrame(account_in_q1_not_q2, columns=account_col_header).to_excel(writer, sheet_name="仅Q1存在账号", index=False)
    pd.DataFrame(account_in_q2_not_q1, columns=account_col_header).to_excel(writer, sheet_name="仅Q2存在账号", index=False)
    # 整行类结果写入对应sheet
    pd.DataFrame(all_rows_are_same_in_both, columns=table_header).to_excel(writer, sheet_name="两季度一致行", index=False)
    pd.DataFrame(rows_in_q1_not_q2, columns=table_header).to_excel(writer, sheet_name="仅Q1存在行", index=False)
    pd.DataFrame(rows_in_q2_not_q1, columns=table_header).to_excel(writer, sheet_name="仅Q2存在行", index=False)

print(f"所有结果已写入文件:{output_excel}")
# ---------------------- 新增:写入多工作表Excel 结束 ----------------------

效果说明
  • 控制台输出会按分类加分隔线、显示记录总数、带表头逐行打印,不会再出现整段列表挤在一起难以阅读的问题
  • 生成的Excel文件和两个源CSV存放在同一目录,6类结果分别存在6个独立工作表中,自带列名,打开即可直接筛选查阅
  • 如果你的CSV文件不是utf-8编码,把代码里open()的encoding参数改成对应编码即可,比如gbk、utf-8-sig

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:03:21