如何用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
相关产品推荐
相关产品推荐

