通过python脚本批量处理文件夹中的多个excel文件并输出到文件夹中,同时忽略其他文件类型

问题描述 投票:0回答:1

我们的库存报告软件每周都会以 .xlsx 格式将 15 份以上不同的库存报告(每个供应商各一份)输出到一个文件夹中。

所有 Excel 工作表均采用相同的格式,但在最终用户“可用”之前需要进行大量操作。在上周尝试学习 python 并将各种代码拼凑在一起之后,我设法想出了一个非常粗糙的脚本来执行所需的处理。

脚本按预期工作,但目前我必须在脚本中手动输入单独的 Excel 工作表文件路径,并更改输出文件名,然后为每个相应的 Excel 文件运行脚本。每周对 15 个以上的文件执行此操作会使脚本变得多余,因为在 Excel 中手动重新格式化会花费更少的时间。

经过更广泛的论坛阅读,并尝试将我的脚本插入其他代码解决方案中(https://python-forum.io/thread-10841.html),我陷入了僵局。我正在努力想出一个函数来批量处理一个文件夹中的所有 Excel 文件,并忽略所有其他文件。理想情况下,被操作的文件将替换同一文件夹中的原始 Excel 文件,但如果不可能,那么也不会破坏交易。

为了添加另一个曲线球,我一直在编写脚本并在我的 mac 上部署我的代码(使用我从工作中发送给自己的 .xlsx 文件的副本以及 mac os 文件路径)来测试我的脚本,但是我希望最终能在工作中的Windows系统上部署这个脚本。

我在下面只包含了我原来的、当前正在运行的脚本。

谢谢大家

    #import pandas library
    import pandas as pd

    #import numpy
    import numpy as np

    #importing our excel to dataframe
    df = pd.read_excel('/Users/christiane/Downloads/AGLC CJ Test.xls.xlsx')

    #renaming our headers for each column
    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)

    #convert 'vendor code' column data to string data
    df['vendor code'] = df['vendor code'].astype(str)

    #delete everything that doesn't start with a number from the bottom of the table
    df = df[~df['vendor code'].str.contains("[a-zA-Z]").fillna(False)]

    #convert 'vendor code' column data to interger data
    df['vendor code'] = df['vendor code'].astype(int)

    #sort values in column #1 from smallet to largest
    df.sort_values(by='vendor code', ascending=True, inplace=True)

    #add new column at the end input formula and populate downwards (=K1+L1)
    df['expectedinventory'] = df.loc[:,['current inventory', 'incoming inventory']].sum(axis=1)

    #move 'expected inventory' column from the end position to correct column position
    name_col = df.pop('expectedinventory')
    df.insert(12, 'expectedinventory', name_col)

    #delete columns 'm' and 'o'
    df = df.drop(['m', 'o'], axis=1)

    #run formula for 4 weeks of back orders and populate column “sold in last 4 weeks” with the results 
    df['Sales Advice'] = df['expectedinventory'] - (( df['Sales: Previous 4 weeks']*1) + (0.1*( df['Sales: Previous 4 weeks'])*1)) 


    #Don't know what this does but it works!
    pd.set_option('future.no_silent_downcasting', True)

    #change NaN values to Zero
    df['Sales Advice'] = df['Sales Advice'].fillna(0)


    inventory_data = pd.DataFrame(df)
    cols = ['Sales Advice']
    inventory_data.loc[:, cols] = inventory_data[cols].astype('float64').round()

    #delete unnecessary columns
    df = df.drop(['b', 'c', 'e', 'f','g','h', 'i', 'j'], axis=1)

    #adding a right-most column with NaN values
    df = df.reindex(columns=df.columns.tolist() + ['Ordering Now'])

    #output excel file
    df.to_excel('filteredaglctest.xlsx', index = False)
python list function batch-processing
1个回答
0
投票
from pathlib import Path 
# APIs get imported here 

# Main folder where excel files are found 
FOLDER = "/home/user/Documents/excel_files" #Change this to your folder path!
EXT = ".xlsx"

def updateExcel(file):
    print(f"---> Processing {file} <----")
    #Insert your code here:

def main():
    #Specift the path in which the files are found 
    folder_path = Path(FOLDER)
    #Get a list of files with a specific extension
    files_ext = [files_ext for file in folder_path.iterdir() if file.is_file() and file.sufix = EXT]
    #Process the files 
    for file in files_ext:
        updateExcel(FOLDER+"/"+file)

if __name__ == '__main__':
    main()
© www.soinside.com 2019 - 2024. All rights reserved.