指定某一列拆分表格

import os
import pandas as pd
import concurrent.futures
from tqdm import tqdm
from Tools.clothes import countTime


@countTime
def split_xlsx(input_file_path, sheet_n, unique_n, output_folder='./拆分名单'):
    """
    
    @param input_file_path: 需要拆分的表格路径(./xlsx)
    @param sheet_n: 需要拆分的sheet名
    @param unique_n: 根据哪列拆分,该列的标题
    @param output_folder: 输出路径
    @return: 
    """
    # 检查输入路径是否存在
    if not os.path.isfile(input_file_path):
        raise FileNotFoundError(f"No such file: '{input_file_path}'")

    # 移除文件扩展名以获得输出路径
    output_file_name, _ = os.path.splitext(os.path.basename(input_file_path))

    # 创建完整的输出路径
    output_file_path = os.path.join(output_folder, output_file_name)

    # 创建输出文件夹(如果不存在)
    os.makedirs(output_file_path, exist_ok=True)

    # 读取原始Excel文件
    df = pd.read_excel(input_file_path, sheet_name=sheet_n)
    if unique_n in list(df.columns):
        # 获取指定列的所有唯一值
        unique_values = df[unique_n].unique()

        def split_and_save(value):
            split_df = df[df[unique_n] == value]
            with pd.ExcelWriter(f'{output_file_path}/{value}.xlsx') as writer:
                split_df.to_excel(writer, index=False, sheet_name='Sheet1')

        with concurrent.futures.ThreadPoolExecutor() as executor:
            # 提交所有任务
            futures = {executor.submit(split_and_save, value) for value in unique_values}
            # 处理任务
            for future in tqdm(concurrent.futures.as_completed(futures), total=len(futures)):
                pass


if __name__ == '__main__':
    input_path = 'XXXXX.xlsx'
    name = "XXXXX"
    sheet_name = 'XXX'
    split_xlsx(input_file_path=input_path, sheet_n=sheet_name, unique_n=name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值