Share a python utility script: move files in batches

Scenario: Take my situation in the script as an example. The script is suitable for moving the file path recorded in the excel file to the specified path, such as moving PDF.


import logging
import logging.handlers
import pandas as pd
import os
import shutil
import csv
from tqdm import tqdm
import time

def printf_Start():
    with open("logo.txt", mode='r', encoding='utf8') as lo:
        los = lo.read()
        print(los)

#读取文件
def get_Path(fileNameE,sheet):
    try:
        df1 = pd.read_excel(fileNameE, sheet_name=sheet)
        return df1
    except:
        print("请重新检查参数!或者检查源码设置。")
        return None

#移动文件
def move_Files(df,new_dir,main_dir):
    k = 0
    m = 0
    j=0
    logger = logging.getLogger(__name__)  # 实例化一个logger对象
    logger.setLevel(level=logging.INFO)
    # 创建一个文件句柄
    file_handle = logging.FileHandler(filename=main_dir + "程序运行日志.log",encoding="utf-8", mode='w')
    file_handle.setLevel(logging.INFO)
    # 创建一个输出格式
    fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    file_handle.setFormatter(fmt)  # 文件句柄设置格式
    logger.addHandler(file_handle)  # logger对象绑定文件句柄

    #关闭
    error = open(main_dir+'移动情况.csv','w',encoding='utf-8')
    csv_writer = csv.writer(error)
    csv_writer.writerow(["file_path","file_name","原因"])
    f = open(main_dir+"移动文件日志.log", "w", encoding='utf-8')

    text = ""
    for i in tqdm(range(len(df))):
        if os.path.exists(new_dir+str(df["file_name"][i])+".pdf"):
            f.write("{} ".format(i+1)+"error--->Target目录已存在文件:{}".format(df["file_name"][i])+".pdf"+"\n")
            k = k+1
            csv_writer.writerow([new_dir+df["file_name"][i]+".pdf",str(df["file_name"][i])+".pdf",'Target目录已存在该pdf文件'])
            logger.warning('This is an customer Warning Message: Countinue! {}移动失败!'.format(df["file_path"][i]) \
                           +'\n  在Target目录中已存在此文件,不过程序不会就此终止,程序将继续尝试移动其它文件!',exc_info=True)
            continue
        else:
            try:
                shutil.move(df["file_path"][i],new_dir+str(df["file_name"][i])+".pdf")
                j= (j+1)
                f.write("{} ".format(i+1)+"success--->移动成功!,移动前是:"+df["file_path"][i]+",移动后是:"+new_dir+str(df["file_name"][i])+".pdf"+"\n")
                csv_writer.writerow([df["file_path"][i], str(df["file_name"][i]) + ".pdf", '移动成功'])
                logger.info('This is an customer Info Message: Successfully! {}移动成功!'.format(df["file_path"][i]),exc_info=True)
                text = text + str(i)
                time.sleep(0.2)
            except:
                f.write("{} ".format(i+1)+"error--->Source目录不存在文件:{}".format(df["file_name"][i])+".pdf"+"\n")
                m = m+1
                csv_writer.writerow([df["file_path"][i],str(df["file_name"][i])+".pdf",'Source目录不存在该pdf文件'])
                logger.warning('This is an customer Warning Message: Countinue! {}移动失败!'.format(df["file_path"][i]) \
                               +'\n  在Source目录中不存在此文件,不过程序不会就此终止,程序将继续尝试移动其它文件!',exc_info=True)


    print("统计如下:")
    print("Excel文件路径表共有{}条数据记录".format(len(df)),"一共移动{}个PDF文件".format(j))
    print("有{}个pdf文件在Target目录已存在!【具体请查看 移动情况.csv 或者 日志.log】".format(k))
    print("有{}个pdf文件在Source目录不存在! 【具体请查看 移动情况.csv 或者 日志.log】".format(m))
    print("日志文件路径:{}".format(main_dir+'移动情况.csv'))
    print("记录移动PDF文件日志的文件路径:{}".format(main_dir+"移动文件日志.log"))
    print("记录程序运行日志的文件路径:{}".format(main_dir+"程序运行日志.log"))
    print("*****--------(●'◡'●)---------*****")
    f.close()
    error.close()
    print("*      提示!此次操作已完成!     *")
    print("*****--------(●'◡'●)---------*****")
    start()

def get_dir():
    print("--------------------------------------------------")
    # 文件读取
    fileNameE = input("请输入文件路径表的路径:")  # 文件路径表
    sheetName = input("请输入数据所在的Sheet的名称:")
    # 移动文件
    new_dir = input("请输入要移动到的那个文件夹的路径:")  # 移动到的那个文件夹
    main_dir = input("请输入日志文件想存放的文件夹路径:")  # 脚本所在的文件夹
    print("---------------------------------------------------")
    return fileNameE,sheetName,new_dir,main_dir

def judes(fileNameE,sheetName,new_dir,main_dir):
    jude = input("是否确定移动(确定输入y,重新来输入n):")
    if jude == 'y':
        try:
            os.chdir(new_dir)
            df = get_Path(fileNameE, sheetName)
            if type(df) == None:
                print("当前无法执行!请重新检查Sheet Name或者其它参数!或联系相关人员。")
            else:
                move_Files(df, new_dir, main_dir)
        except:
            print("无法找到路径!请重新输入!")
            print("*****--------(●'◡'●)---------*****")
            start()
    elif jude == 'n':
        print("    提示!已进入重新输入路径:    ")
        print("*****--------(●'◡'●)---------*****")
        start()
    else:
        print("  提示!命令无效,请输入y或者n。  ")
        print("*****--------(●'◡'●)---------*****")
        judes(fileNameE,sheetName,new_dir,main_dir)

def start():
    fileNameE, sheetName, new_dir, main_dir = get_dir()
    judes(fileNameE, sheetName, new_dir, main_dir)

if __name__ == '__main__':
    printf_Start()
    # 脚本解释
    print("输入示例:")
    print("-----------------------------------")
    print("请输入文件路径表的路径:E:\\\\SystemDesktop\\\\WorkSpaces\\\\脚本测试\文件路径表.xlsx")
    print("请输入数据所在的Sheet的名称:Sheet1")
    print("请输入要移动到的那个文件夹的路径:E:\\\\SystemDesktop\\\WorkSpaces\\\\脚本测试\\\\targetDir\\\\")
    print("请输入日志文件想存放的文件夹路径:E:\\\\SystemDesktop\\\\WorkSpaces\\\\")
    print("注意:\n 文件夹路径结尾要有\\\\, 路径中的\\都要有两个\\。")
    print("请注意区分大小写字母。严重区分大小写。")
    print("-----------------------------------")
    start()
# E:\\SystemDesktop\\WorkSpaces\\脚本测试\文件路径表.xlsx
# E:\\SystemDesktop\\WorkSpaces\\脚本测试\\targetDir\\
# E:\\SystemDesktop\\WorkSpaces\\

Guess you like

Origin blog.csdn.net/qq_42658739/article/details/109478374