Comparta una secuencia de comandos de la utilidad de Python: mueva archivos en lotes

Escenario: tome mi situación en el script como ejemplo. El script es adecuado para mover la ruta del archivo registrada en el archivo de Excel a la ruta especificada, como mover 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\\

Supongo que te gusta

Origin blog.csdn.net/qq_42658739/article/details/109478374
Recomendado
Clasificación