赞
踩
信息技术2.0培训结束了,教师培训系统内需要批量上传25分的校本培训信息。,并且要求将每个人一份Word"培训体会"的文件名改成“师训号.docx”。再上传。
由于前期已经使用问卷星收集教师的园本培训小结体会,所以我有一套名称格式相对统一的作业集。
传统方法:docx文件名中的名字,然后在excle里查找师训号,然后选择复制师训号,双击docx文件名,重命名文件,黏贴师训号。 但几十份docx都用这样的方法操作,肯定会产生疲劳暴躁及想不到的错误黏贴结果。
将大量作业放在“桌面”的“信息技术2.0培训作业”文件夹里
观看小结的样式,其结构为:序号_班组_姓名_ 信息技术2.0培训小结
使用”-“为切割点,需要保留第2组内容“姓名”,并加上"docx“后缀。
- import os
- import time
- path =r"C:\Users\jg2yXRZ\OneDrive\桌面\信息技术2.0培训小结"
-
- fileList=os.listdir(path)
- # 删除“_请将培训小结.docx上传(电_)
- for file in fileList:
-
- split_str = file.split('_')
- newname1 = split_str[2] # _的第0部分=序号
- # split_str = file.split('培')
- # newname2 = split_str[1]
- # _的第2部分=“()+后面的内容”
-
-
- newname=newname1+ '.docx'
- oldname_path = os.path.join(path,file)
- # 文件新路径
- newname_path = os.path.join(path,newname)
- # 新旧对调
- os.rename(oldname_path, newname_path)
运行后的文件名批量转化为“姓名.docx)
excle表格内包含信息:第一列“姓名”,第二列“学号”(师训号)
表内信息作为匹配文件名称用。非常重要。
直接运行以下代码
- # https://www.jb51.net/article/247374.htm
- import os
- import xlwings as wx
- import time
- def listdir(path, list_name): #传入存储的list
- for file in os.listdir(path):
- # 排除临时的文件
- if '~$' in file:
- continue
-
- # 取得照片清单 源文件
- if ".docx" in file:
- file_path = os.path.join(path,file)
- list_name.append(file_path)
-
- # 取得excel文件 修改表
- if ".xls" in file:
- index_file = os.path.join(path,file)
- print("数据源文件-->"+index_file)
-
- print(list_name)
- return index_file
-
- def getinfo(new_name,index_file): # 获取人员姓名和编号
- app = wx.App(visible=False, add_book=False) # 不打开baiexcel
- print("读取人员信息--->"+index_file)
- wb = app.books.open(index_file)
- sheet = wb.sheets[0]
-
- nrows = sheet.used_range.last_cell.row #获取最大行数
- ncolumns = sheet.used_range.last_cell.column #获取最大列数
-
- # 查找姓名和编号的列
- file_name = ""
- empl_name = ""
- empl_numb = ""
- ename_col = 0
- enumb_col = 0
-
- print("最大列数--->"+str(ncolumns)) # 2
-
- for col in range(1, ncolumns+1):
- if sheet.range((1,col)).value == "姓名":
- ename_col = col
- print("姓名的列--->"+str(col)) # 1
-
- if sheet.range((1,col)).value == "学号":
- enumb_col = col
- print("员工号的列--->"+str(col)) # 2
-
- # 取行中的姓名和编号
- for row in range(2,nrows+1):
- empl_name = str(sheet.range((row,ename_col)).value)
- empl_numb = str(sheet.range((row,enumb_col)).value)
- file_name = (empl_name + empl_numb).split('.')[0] # 新的名字
- print(file_name)
- new_name.append(file_name)
-
- # print(new_name)
-
- wb.close()
- app.quit()
-
- def change_name(file_path,new_name,list_name):
- # 逐个处理docx
- for filename in list_name: # 文件名遍历列表名单
- print("旧文件名"+filename) # 打印就文件名=列表名字单 路径+XXX.docx
- old_name = (os.path.basename(filename)).split('.')[0]# 提取老名字=XXX(无。docx)
- print(old_name)
- # 查找新名字清单中是否有此姓名
- for nfile in new_name: # 新文件 遍历新文件名 ,新文件名=有名字的
- print(nfile)
- if old_name in nfile: # 如果老名字在新文件内(存在)
- nfname = file_path+os.sep+nfile+".docx"
- # 新名字=路径+分隔符+名字学号+docx XX123214.docx
- print("新文件名"+nfname)
- os.rename(filename,nfname) # 替换
- break
- def main():
- file_path = input('输入文件夹路径:') # 文件夹位置
- # global(file_path)
- try:
- #读取文件夹下的所有文件
- List_files=[]
- index_file = listdir(file_path,List_files)
-
- # 读取员工姓名和员工号,组成新的文件名
- new_name=[]
- getinfo(new_name,index_file)
-
- # 修改文件名字
- change_name(file_path,new_name,List_files)
-
- except Exception as e:
- # 打印异常信息
- print(e)
-
- time.sleep(3)
-
- fileList=os.listdir(file_path)
- for file in fileList:
- # split_str = file.split('1')#+后面的写错了,就用这个提取前面的部分和后缀一起重新命名
- split_str = file[-17:]
- # 提取最后进修编号
- newname1 = split_str
- # newname2 = split_str[1]
-
- newname=newname1
- oldname_path = os.path.join(file_path,file)
- # 文件新路径
- newname_path = os.path.join(file_path,newname)
- # 新旧对调
- os.rename(oldname_path, newname_path)
-
- if __name__ == '__main__':
- main()
-
-
-
-
输入文件路径:复制文件所在路径
上传匹配情况:培训系统自动上传研究成果(师训号.docx),并显示未上传人员信息(便于补全)
本次找代码并调试、添加新代码,花了2个多小时,如果人工批量修改60个文件名估计也差不多的时间。但是确定了这个代码,就能够反复运用,特别是对于大批量的数据(>100个)非常有效果(速度、精确性)。所以
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。