如何保留 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)
相关推荐
写代码的小阿帆13 小时前
深度学习—Pandas标签库基础
深度学习·pandas
我就说好玩13 小时前
2020年美国总统大选数据分析与模型预测
大数据·python·数据挖掘·数据分析·pandas·sklearn
神奇夜光杯17 小时前
Python酷库之旅-第三方库Pandas(200)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
立黄昏粥可温1 天前
Python 从入门到实战44(Pandas读写数据)
开发语言·python·pandas
python1562 天前
Python Pandas内存管理技巧助力高效处理大数据
大数据·python·pandas
Python大数据分析@2 天前
学习python中的pandas有没有好的教程推荐?
python·学习·pandas
FreedomLeo12 天前
Python数据分析NumPy和pandas(二十三、数据清洗与预处理之五:pandas的分类类型数据)
python·数据分析·numpy·pandas·categoricals·数据分类分析·建模和机器学习
Cachel wood4 天前
Django3 + Vue.js 前后端分离书籍添加项目Web开发实战
开发语言·前端·vue.js·python·数据分析·sqlite·pandas
Kalika0-05 天前
Pandas DataFrame学习
pytorch·学习·pandas
Kalika0-05 天前
Pandas相关性分析
pytorch·python·学习·json·pandas