【python_将列表拆分成几组,分批次写入excel】

一般的方式

将列表存入dataframe对象,并将df拆分,分批次写入excel里面。
这种方法并不快,不如直接将整个dataframe对象写入excel。

import pandas as pd

def write_batches_to_excel(data, batch_size, filename):
    """
    将数据分批写入Excel文件。

    :param data: 二维列表,其中每个子列表代表一行数据
    :param batch_size: 每个批次包含的数据行数
    :param filename: 输出Excel文件的名称
    """
    writer = pd.ExcelWriter(filename)
    
    for i in range(0, len(data), batch_size):
        # 获取当前批次的数据
        batch_data = data[i:i + batch_size]
        
        # 将批次数据转换为DataFrame
        df = pd.DataFrame(batch_data)
        
         # 第一次写入时包含表头
        if i == 0:
            df.to_excel(writer, sheet_name='Sheet1', index=False, header=False)
        else:
            df.to_excel(writer, sheet_name='Sheet1', index=False, header=False, startrow=writer.sheets['Sheet1'].max_row)

    writer.close()

# 示例用法
data = [
    ['A0', 'B0', 'C0'],
    ['A1', 'B1', 'C1'],
    ['A2', 'B2', 'C2'],
    ['A3', 'B3', 'C3'],
    ['A4', 'B4', 'C4'],
    ['A5', 'B5', 'C5'],
    ['A6', 'B6', 'C6'],
    ['A7', 'B7', 'C7'],
]

batch_size = 3
filename = "D:\\desktop\\1234.xlsx"

write_batches_to_excel(data, batch_size, filename)

更快的方式

首先将原始数据拆分成多个CSV文件,然后将这些CSV文件合并到一个dataframe对象,再写入excel。
这种方法虽然快一些,但是多个CSV文件是多余的,如果要删除话,还需要花费时间。

import pandas as pd
import os

temporaryFolderPath='D:\\desktop\\new'
targetFilePath='D:\\desktop\\combined_output22.xlsx'
# 假设我们有一个大的列表
header_list=['Column1', 'Column2', 'Column3']
big_list = [
    ['A0', 'B0', 'C0'],
    ['A1', 'B1', 'C1'],
    ['A2', 'B2', 'C2'],
    ['A3', 'B3', 'C3'],
    ['A4', 'B4', 'C4'],
    ['A5', 'B5', 'C5'],
    ['A6', 'B6', 'C6'],
    ['A7', 'B7', 'C7'],
]

# big_list = list(range(1, 10001))  # 这个列表有10000个元素

def split_data_to_csv_and_merge_to_excel(temporaryFolderPath,targetFilePath,big_list,header_list):

    # 将列表转换为DataFrame
    df = pd.DataFrame(big_list)

    # 按每5000行拆分
    chunk_size = 4999
    chunks = [df[i:i+chunk_size] for i in range(0, df.shape[0], chunk_size)]

    # 创建一个空列表用于存储CSV文件的路径
    csv_file_paths = []

    # 写入CSV文件
    for i, chunk in enumerate(chunks):
        # 生成CSV文件的完整路径
        csv_path = f'{temporaryFolderPath}\\output_{i}.csv'
        chunk.to_csv(csv_path, index=False,header=header_list)
        csv_file_paths.append(csv_path)

    # 读取CSV文件并将它们合并到一个DataFrame
    combined_df = pd.concat([pd.read_csv(f'{temporaryFolderPath}\\output_{i}.csv') for i in range(len(chunks))])

    # 将合并后的DataFrame写入Excel文件
    combined_df.to_excel(targetFilePath, index=False,header=header_list)

    # 删除原始的CSV文件
    for file in csv_file_paths:
        os.remove(file)

split_data_to_csv_and_merge_to_excel(temporaryFolderPath,targetFilePath,big_list,header_list)

目前发现最快的方式

先将列表写入csv,从csv写入到excel。

import pandas as pd
import os
import time

def save_to_csv_and_csv_to_excel(big_list,header_list,csv_file, excel_file, sheet_name='Sheet1'):
    
    start_time = time.time()

    # 将列表转换为DataFrame
    df = pd.DataFrame(big_list)

    #直接导出csv文件
    df.to_csv(csv_file, index=False,header=header_list)

    # 读取 CSV 文件
    df = pd.read_csv(csv_file)
    
    # 将 DataFrame 写入 Excel 文件
    with pd.ExcelWriter(excel_file, engine='openpyxl') as writer:
        # 使用 Pandas 的 to_excel 方法直接写入数据
        df.to_excel(writer, sheet_name=sheet_name, index=False)

    os.remove(csv_file)

    print(f"Execution took {time.time() - start_time:.2f} seconds")

    
# 假设我们有一个大的列表
header_list=['Column1', 'Column2', 'Column3']
big_list=[[i, i, i] for i in range(1, 120001)]
csv_file='D:\\desktop\\new\\临时.csv'
excel_file='D:\\desktop\\new\\combined_output.xlsx'

# 将 CSV 文件写入到 Excel 文件
save_to_csv_and_csv_to_excel(big_list,header_list,csv_file, excel_file, sheet_name='Sheet1')
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值