python处理excel系列一之根据文件名从一文件夹批量复制文件到新文件夹并进行处理

用到的函数主要有shutil.copy()、os.path.join()、pd.merge()。

import os
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
import shutil

#先从分工表里提取出自己的分工
org_data=pd.read_excel('分工表.xlsx',sheet_name='最终清单')
df=org_data[org_data['责任人']=='mmm']

#将分工给自己的表名转为list,选取表文档路径的时候是为了保证表名的完整性
tablenames=df['表文档路径'].tolist()

#然后根据表名从对应的文件夹中提取出需要自己处理的原始表
oldpath=r'D/programs/all/'  #原始文件所在文件夹
newpath=r'D/programs/input/'

#定义一个函数去对照分工表提取出的表名将需要处理的原始表从原始文件夹提取到整理后的文件夹中
def mycopy(srcpath,dstpath,filename):
    if not os.path.exists(srcpath):
        print("srcpath not exist!")
    if not os.path.exists(dstpath):
        print("dstpath not exist!")
    for root,dirs,files in os.walk(srcpath):
        if filename in tablenames:
            #如果存在就复制,使用shutil函数
            shutil.copy(os.path.join(root,filename),dstpath)
        else:
            #不存在就将文件名打印出来
            print(filename)
if __name__=="__main__":
    for filename in tablenames:
        mycopy(oldpath,newpath,filename)
        
source="D:\\programs\\input"
ob="D:\\programs\\output"
file_list=os.listdir(source)

#定义一个对照字典表进行语义匹配的函数来处理表
def duibiao(file,i):
    dexm=pd.read_excel(file,sheet_name="表字段")
    data=DataFrame({"字段名":list(dexm['字段名']),"元素编码":list(dexm['元素编码']),"中文名称":list(dexm['中文名称'])})
    zidian=pd.read_excel(r"D:\programs\字典表.xlsx",sheet_name="字典")
    zdtab=DataFrame({"中文名称":list(zidian['原表']),"标准表名称":list(zidian['标准表'])})
    df=pd.merge(data,zdtab,how='left',on=['中文名称']).fillna("")
    df.to_excel(os.path.join(ob,i))

#然后遍历要处理的原始表用自定义函数进行处理
for i in file_list:
    duibiao(os.path.join(source,i),i) #os.path.join()函数用于文件路径拼接

你可能感兴趣的:(python,os)