• 如何保留 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)
    复制代码

     

  • 相关阅读:
    C++ std::list中size()的时间复杂度
    Pytorch学习整理笔记(一)
    TypeScript类的使用
    Qt | Qt For Android、Qt5.14.2安卓开发环境搭建详细步骤
    软件测试的分类
    敏捷开发中的站立会应该怎么开?
    Pass cfg from cmd to test
    每个 JavaScript 开发人员都应该知道的 7 个速记优化技巧
    使用SystemParametersInfo访问用户界面设置
    [无监督学习] 15.详细图解混合高斯分布
  • 原文地址:https://www.cnblogs.com/lcl-cn/p/18233057