如何保留 Excel 表头和第一行数据并追加 CSV 数据

准备工作

在开始之前,确保你的 Python 环境中已经安装了 openpyxlpandas 库。可以使用以下命令进行安装:

复制代码
pip install openpyxl pandas

第一步:编写函数保留表头和第一行数据

我们首先编写一个函数 keep_first_two_rows,用于保留指定工作表的表头和第一行数据,其余数据将被删除。

复制代码
from openpyxl import load_workbook

def keep_first_two_rows(filepath, sheetname):
    try:
        # 加载 Excel 文件
        wb = load_workbook(filepath)
        ws = wb[sheetname]

        # 删除第三行之后的所有行
        ws.delete_rows(3, ws.max_row)

        # 保存修改后的 Excel 文件
        wb.save(filepath)
        print(f"成功保留表头和第一行数据到工作表 {sheetname}")
    except Exception as e:
        print(f"保留表头和第一行数据时出错: {e}")

解释:

  • load_workbook(filepath):加载指定路径的 Excel 文件。
  • wb[sheetname]:获取指定名称的工作表。
  • ws.delete_rows(3, ws.max_row):从第三行开始删除所有后续行,只保留前两行。
  • wb.save(filepath):保存对 Excel 文件的修改。

第二步:编写函数追加 CSV 数据

接下来,我们编写一个函数 append_data_from_csv,用于将 CSV 文件中的数据追加到指定工作表的末尾。

复制代码
import pandas as pd
from openpyxl import load_workbook

def append_data_from_csv(filepath, sheetname, csv_filepath):
    try:
        # 从 CSV 文件中读取新数据
        new_data = pd.read_csv(csv_filepath)

        # 加载 Excel 文件
        wb = load_workbook(filepath)
        ws = wb[sheetname]

        # 将新数据追加到工作表末尾
        for r_idx, row in enumerate(new_data.values, ws.max_row + 1):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        # 保存修改后的 Excel 文件
        wb.save(filepath)
        print(f"成功从 CSV 文件中追加新数据到工作表 {sheetname} 后面")
    except Exception as e:
        print(f"追加新数据时出错: {e}")

解释:

  • pd.read_csv(csv_filepath):使用 pandas 从指定路径读取 CSV 文件中的数据。
  • wb[sheetname]:获取指定名称的工作表。
  • enumerate(new_data.values, ws.max_row + 1):从工作表的最后一行开始,逐行追加 CSV 数据。
  • ws.cell(row=r_idx, column=c_idx, value=value):将 CSV 文件中的每个值插入到 Excel 工作表的对应单元格中。
  • wb.save(filepath):保存对 Excel 文件的修改。

第三步:主程序调用

最后,我们编写主程序,调用以上两个函数,完成具体操作。

复制代码
if __name__ == "__main__":
    # 指定 Excel 文件路径、工作表名和 CSV 文件路径
    excel_file_path = "C:\\Users\\Administrator\\Desktop\\销售系数数据同步.xlsx"
    sheet_name = "商品费用"
    csv_file_path = "F:\\工作内容\\我的数据\\商品费用解析数据\\商品费用数据汇总.csv"

    # 调用函数保留表头和第一行数据
    keep_first_two_rows(excel_file_path, sheet_name)

    # 调用函数从 CSV 文件中追加新数据到指定工作表后面
    append_data_from_csv(excel_file_path, sheet_name, csv_file_path)

解释:

  • excel_file_path:指定 Excel 文件的路径。
  • sheet_name:指定工作表名称。
  • csv_file_path:指定 CSV 文件的路径。
  • keep_first_two_rows(excel_file_path, sheet_name):调用函数保留表头和第一行数据。
  • append_data_from_csv(excel_file_path, sheet_name, csv_file_path):调用函数从 CSV 文件中追加新数据到指定工作表。

完整代码

复制代码
from openpyxl import load_workbook
import pandas as pd

def keep_first_two_rows(filepath, sheetname):
    try:
        # 加载 Excel 文件
        wb = load_workbook(filepath)
        ws = wb[sheetname]

        # 删除第三行之后的所有行
        ws.delete_rows(3, ws.max_row)

        # 保存修改后的 Excel 文件
        wb.save(filepath)
        print(f"成功保留表头和第一行数据到工作表 {sheetname}")
    except Exception as e:
        print(f"保留表头和第一行数据时出错: {e}")

def append_data_from_csv(filepath, sheetname, csv_filepath):
    try:
        # 从 CSV 文件中读取新数据
        new_data = pd.read_csv(csv_filepath)

        # 加载 Excel 文件
        wb = load_workbook(filepath)
        ws = wb[sheetname]

        # 将新数据追加到工作表末尾
        for r_idx, row in enumerate(new_data.values, ws.max_row + 1):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        # 保存修改后的 Excel 文件
        wb.save(filepath)
        print(f"成功从 CSV 文件中追加新数据到工作表 {sheetname} 后面")
    except Exception as e:
        print(f"追加新数据时出错: {e}")

if __name__ == "__main__":
    # 指定 Excel 文件路径、工作表名和 CSV 文件路径
    excel_file_path = "C:\\Users\\Administrator\\Desktop\\销售系数数据同步.xlsx"
    sheet_name = "商品费用"
    csv_file_path = "F:\\工作内容\\我的数据\\商品费用解析数据\\商品费用数据汇总.csv"

    # 调用函数保留表头和第一行数据
    keep_first_two_rows(excel_file_path, sheet_name)

    # 调用函数从 CSV 文件中追加新数据到指定工作表后面
    append_data_from_csv(excel_file_path, sheet_name, csv_file_path)
相关推荐
benchmark_cc17 小时前
如何用 Python 进行多周期 K 线合成与时区对齐?基于 QuantDash 与 Pandas 的量化数据清洗实战(附 GitHub 源码)
开发语言·python·github·盯盘·pandas·quantdash·量化数据
梅雅达编程笔记2 天前
零基础学 Python 第14章 | 模块、包与第三方库
开发语言·python·django·numpy·pandas
梅雅达编程笔记2 天前
零基础学 Python 第15章 | 类与对象:面向对象编程入门
开发语言·python·django·numpy·pandas
benchmark_cc3 天前
Python 量化核心基础:前复权、后复权与不复权有什么区别?基于 QuantDash 的数据处理与回测避坑指南
开发语言·python·pandas·量化策略·量化交易·quantdash
人工干智能3 天前
科普:Pandas 索引器 loc 与 iloc 的编程思维
java·人工智能·pandas
梅雅达编程笔记3 天前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
benchmark_cc4 天前
用 Streamlit + QuantDash 10分钟拼装一个跨市场持仓风险与相关性诊断面板
开发语言·python·pandas·量化策略·量化交易·quantdash
benchmark_cc4 天前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
weixin_307779137 天前
Python Pandas读取Excel Sheet生成SQL WHERE条件
python·sql·自动化·excel·pandas
梅雅达编程笔记8 天前
零基础学 Python 第7章 | 字典 dict:键值对存储
开发语言·python·beautifulsoup·numpy·pandas