批量替换工具

该博客介绍了一个用于批量替换Excel中内容的工具,它根据预设的替换模板读取Excel文件,处理第一个工作表,并能处理固定模板的配置输出。工具通过Python的pandas库读取Excel,寻找目标表格,然后进行替换操作。用户输入Excel路径,工具会读取替换模板,生成新的内容并追加到指定输出路径。适用于批量处理数据的场景。
摘要由CSDN通过智能技术生成

工具功能说明

  • 根据Excel的替换模板将,内容批零替换到文件里面并追加
  • 实现批零替换和固定模板的配置输出

工具使用说明

  1. 配置替换数据模板 # 只处理第一个sheet name
  2. 替换模板表头不可以更改
  3. 替换组可以自己定义 但是需要和 下面的参数表表名字一致
  4. 替换组的表名为配置模板里面的参数(主要参数的唯一性 建议在这里插入代码片加上{})

工具代码

代码示例


from pandas import read_excel
from chardet import detect

def find_encoding(path):
    '''查找编码的形式
    {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}'''
    with open(path, 'rb') as f:
        encode = detect(f.read())
        # print(encode)
        return encode['encoding']
        
def get_new_tabe_title(title):
    '''
    :param title: 表头部分
    :return: list
    '''
    title.fillna(method='ffill', axis=1, inplace=True)
    title_columns_num = len(title.columns)
    title_columns = []
    for i in range(title_columns_num):
        val = [str(x) for x in title.iloc[:, i].values]
        title_columns.append('//'.join(val))
    return title_columns

def get_targeted_table(df, table_head, table_head_num=1):
    '''
    :param df: 传入的大表
    :param table_head: 找的新表的名称
    :param table_head_num: 新表头部的数量
    :return: 一个信的表
    '''
    start_line_num = False
    ##找到开始位置
    for i in range(len(df)):
        df_line = df.iloc[i]
        if table_head == df_line.iloc[0]:
            start_line_num = i
            break
    if start_line_num:  # 找到开始位置了
        title = df.iloc[start_line_num + 1:start_line_num + 1 + table_head_num, :].dropna(how='all', axis=1).reset_index(drop=True, )
        title_columns = get_new_tabe_title(title)
        title_columns_num = len(title.columns)
        start_df = df.iloc[start_line_num + 1 + table_head_num:, :title_columns_num]
        start_df.reset_index(drop=True, inplace=True)
        end_line_num = False
        for i in range(len(start_df)):
            df_line = start_df.iloc[i]
            # print(df_line.isnull().values.tolist())
            if False not in df_line.isnull().values.tolist():
                end_line_num = i
                break
        if end_line_num:
            new_table = start_df.iloc[:end_line_num]
        else:
            new_table = start_df
        new_table.columns = title_columns
        new_table.reset_index(drop=True, inplace=True)
        new_table = new_table.copy()
        new_table.fillna(method='ffill', inplace=True)
        return new_table
    else:
        return None
        
def get_config(df, mould_path, output_path, replace_group):
    with open(mould_path, 'r', encoding=find_encoding(mould_path)) as f:
        mould1 = f.read()
    replace_df = get_targeted_table(df, replace_group, table_head_num=1)
    for i in range(len(replace_df)):
        mould = mould1
        df_line=replace_df.iloc[i]
        for columns in replace_df.columns:
            mould = mould.replace(str(columns), str(df_line[columns]))
            # print(output_path)
        with open(output_path, 'a', encoding='utf-8') as f1:
            f1.write(mould + '\n')

def read_replace_mode(df):
    # print(df)
    replace_df = get_targeted_table(df, '替换模块', table_head_num=1)
    for i in range(len(replace_df)):
        df_line = replace_df.iloc[i]
        mould_path = df_line[0]
        output_path = df_line[1]
        replace_group = df_line[2]

        get_config(df, mould_path, output_path, replace_group)

path = input('excel的路径:')
df = read_excel(path)
read_replace_mode(df)
input('完成!!!')

Excel表格

红色部分不可以更改
在这里插入图片描述

exe可执行文件

批量替换.exe
批量替换.xlsx

段福的个人博客看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值