You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python批量处理文件夹内.xlsx库存报表并实现跨平台部署?

问题描述
  • 每周有15+份.xlsx格式的供应商库存报表自动输出到指定文件夹,所有表格格式一致,但需大量处理才能供终端用户使用
  • 已写出单文件处理的Python脚本,但手动逐个输入文件路径、修改输出文件名,处理效率甚至低于手动在Excel中格式化
  • 需实现批量处理文件夹内所有.xlsx文件(自动忽略其他格式),理想状态为处理后覆盖原文件,目前在Mac上测试脚本,最终要部署到Windows系统
修改后的批量处理脚本
import pandas as pd
import numpy as np
import glob
import os

def process_excel(file_path):
    # 读取Excel文件到DataFrame
    df = pd.read_excel(file_path)

    # 重命名列头
    df = df.set_axis(['vendor code', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
                      'current inventory', 'incoming inventory', 'm', 
                      'Sales: Previous 4 weeks', 'o'], axis=1)

    # 转换vendor code为字符串,过滤非数字开头的行
    df['vendor code'] = df['vendor code'].astype(str)
    df = df[~df['vendor code'].str.contains("[a-zA-Z]").fillna(False)]
    df['vendor code'] = df['vendor code'].astype(int)

    # 按vendor code升序排序
    df.sort_values(by='vendor code', ascending=True, inplace=True)

    # 计算expectedinventory并调整列位置
    df['expectedinventory'] = df.loc[:,['current inventory', 'incoming inventory']].sum(axis=1)
    name_col = df.pop('expectedinventory')
    df.insert(12, 'expectedinventory', name_col)

    # 删除指定列
    df = df.drop(['m', 'o'], axis=1)

    # 计算Sales Advice
    df['Sales Advice'] = df['expectedinventory'] - ((df['Sales: Previous 4 weeks'] * 1) + 
                                                   (0.1 * df['Sales: Previous 4 weeks'] * 1))

    pd.set_option('future.no_silent_downcasting', True)
    df['Sales Advice'] = df['Sales Advice'].fillna(0)

    # 对Sales Advice列取整
    cols = ['Sales Advice']
    df.loc[:, cols] = df[cols].astype('float64').round()

    # 删除多余列
    df = df.drop(['b', 'c', 'e', 'f','g','h', 'i', 'j'], axis=1)

    # 添加右侧空列
    df = df.reindex(columns=df.columns.tolist() + ['Ordering Now'])

    # 覆盖原文件保存,若需保留原文件可修改为新路径
    df.to_excel(file_path, index=False)
    print(f"已处理完成: {os.path.basename(file_path)}")

if __name__ == "__main__":
    # 指定目标文件夹路径,可根据实际修改
    # 跨平台写法:Mac用"/Users/xxx/xxx",Windows用"C:\\xxx\\xxx"或r"C:\xxx\xxx"
    target_folder = "/Users/christiane/Downloads"  # 示例Mac路径
    # target_folder = r"C:\Users\YourName\Downloads"  # 示例Windows路径

    # 获取文件夹内所有.xlsx文件
    excel_files = glob.glob(os.path.join(target_folder, "*.xlsx"))

    if not excel_files:
        print("目标文件夹中未找到.xlsx文件")
    else:
        for file in excel_files:
            process_excel(file)
        print("所有文件处理完成")
关键修改说明
  • 将单文件处理逻辑封装为process_excel函数,便于批量调用
  • 使用glob模块自动扫描目标文件夹内所有.xlsx文件,自动过滤其他格式文件
  • 采用os.path.join处理路径,支持Mac和Windows跨平台使用
  • 默认覆盖原文件保存,若需保留原文件,可将保存语句修改为:
    output_path = os.path.join(target_folder, f"processed_{os.path.basename(file_path)}")
    df.to_excel(output_path, index=False)
    

内容的提问来源于stack exchange,提问作者Christian E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:24:51