Cambio automático de nombre de archivo por lotes basado en el script de Python

Cambio automático de nombre de archivo por lotes basado en el script de Python

   Como monitor universitario, a menudo me enfrento al problema de recoger las tareas. Para facilitar el recuento de la cantidad de archivos electrónicos, y en aras de la pulcritud y la belleza, los maestros a menudo especifican el formato de denominación de las asignaciones.
Por ejemplo: formato "Clase + ID de estudiante + nombre_envío uno". Sin embargo, los nombres de las tareas enviadas por los estudiantes a menudo son extraños.
   Hay esto: "Comunicación 170101 + Zhang San + Tarea uno"
   también tiene esto: "1403170101+ Zhang San_ Tarea uno"
   e incluso esto: "Comunicación 170101 Zhang Tres Tarea 1" El
nombre claramente correcto debe ser: "Comunicación 170101 hojas tres_hacer uno ". Pero es un problema tan simple que muchas personas no pueden hacerlo bien. Como resultado, tuve que renombrarlos uno por uno cuando recibía tarea, lo que hizo que mi cerebro fuera más grande.

Así que escribí un pequeño programa en Python para corregir automáticamente todos los nombres desordenados.

No hay mucho que decir, solo mira el programa. Pero primero tengo que presentar los preparativos.

Primero, tengo un archivo de Excel con una lista de clases completa en el escritorio. Inserte la descripción de la imagen aquí
Después de abrirlo, se
Inserte la descripción de la imagen aquí
ve así . Luego, puede poner todos los archivos a renombrar en otra carpeta.

import os
import pandas as pd 
import re 

#这个函数是把每个人的学号和名字从excel文件里提取出来,以便下面改名
def excel_to_list(name_list):  
    df = pd.read_excel(name_list, usecols=[1,2],names=None) 
    #读取项目名称列
    #usecols=[1,2]表明取第二列和第三列,也就是学号和名字。
    #names=None表明不要列名
    df_li = df.values.tolist()
    #print(df_li)
    return df_li  #return的就是学号和名字


if __name__ == '__main__':
    name_list = "C:\\Users\\admin\\Desktop\\通信1701名单.xlsx"    #花名册地址
    path = 'C:\\Users\\admin\\Desktop\\新建文件夹\\'              #收作业地址
    work_name = '预习作业一'                                   #作业名字后缀    
    num_name_list = excel_to_list(name_list)
    count = 0; #数数一共有几份作业,看看齐了没


    for file in os.listdir(path): #遍历作业地址中每一份作业
        try:
            type = str(file).split('.')[1]  #判断是.doc文件还是.pdf文件等,保持格式不变
            type = '.' + type
            print("检测到此次作业类型为",type,"类型")
        except:
            type = None  #文件夹就没有格式后缀了      
            print("检测到此次作业类型为文件夹类型")  
        ini_taskname = str(file).split('.')[0] #把文件名中除了格式后缀的部分拿出来
        for nn in num_name_list:
            num = str(nn[0]) #学号
            na = nn[1] #名字
            if re.findall(r'1402',ini_taskname): #正则表达式,如果在学号中找到了‘1402’,说明是电子专业
                class_name = '电子'
            else:
                class_name = '通信'                                                         
            if re.findall(str(na)[0:3],ini_taskname): #只要文件名中写了本人姓名,就成功匹配到他的名字和学号。
                count = count+1;
                if type is  None: #对所有文件夹改名
                    os.rename(os.path.join(path,file),os.path.join(path,class_name+str(num[-6:])+str(na)+'_'+work_name))
                else: #对所有非文件夹文件改名
                    os.rename(os.path.join(path,file),os.path.join(path,class_name+str(num[-6:])+str(na)+'_'+work_name+type))
					#新的文件夹名字为“作业地址+专业名+班级学号(num[-6:0]是班级+学号的意思)+名字+下划线+文件格式”
    print("本次共计处理",count,"个文件") #看看作业收起了没

Pensando en ello, no hay una buena manera de hacer coincidir la tarea de todos con él, solo usar expresiones regulares para hacer coincidir los nombres. Nadie entregará la tarea sin escribir su propio nombre, ¿verdad?

Te sugiero que abandones

En general, este es un script muy útil. Durante los primeros dos años, fui muy estúpido al cambiar manualmente el nombre del archivo, lo que fue una pérdida de tiempo. Espero que este pequeño código pueda ayudar a todos los que quieran recibir archivos con frecuencia.

Si crees que no está mal, te sugiero que te guste y compartas otras cosas útiles contigo la próxima vez.

Supongo que te gusta

Origin blog.csdn.net/ddatalent/article/details/109258369
Recomendado
Clasificación