当前位置:   article > 正文

【办公类-05-02】Python 多份Word文件的文件名——从“名字.docx”改为“数字编号.docx”。_python docx 命名文件

python docx 命名文件

背景需求:

      信息技术2.0培训结束了,教师培训系统内需要批量上传25分的校本培训信息。,并且要求将每个人一份Word"培训体会"的文件名改成“师训号.docx”。再上传。

     由于前期已经使用问卷星收集教师的园本培训小结体会,所以我有一套名称格式相对统一的作业集。

    传统方法:docx文件名中的名字,然后在excle里查找师训号,然后选择复制师训号,双击docx文件名,重命名文件,黏贴师训号。   但几十份docx都用这样的方法操作,肯定会产生疲劳暴躁及想不到的错误黏贴结果。

 因此希望用python代码批量修改word文件名——指定“名字”转成“师训号”.docx

破解思路:

      一、把word文件名改成“姓名”

      将大量作业放在“桌面”的“信息技术2.0培训作业”文件夹里

观看小结的样式,其结构为:序号_班组_姓名_ 信息技术2.0培训小结

  使用”-“为切割点,需要保留第2组内容“姓名”,并加上"docx“后缀。

  1. import os
  2. import time
  3. path =r"C:\Users\jg2yXRZ\OneDrive\桌面\信息技术2.0培训小结"
  4. fileList=os.listdir(path)
  5. # 删除“_请将培训小结.docx上传(电_)
  6. for file in fileList:
  7. split_str = file.split('_')
  8. newname1 = split_str[2] # _的第0部分=序号
  9. # split_str = file.split('培')
  10. # newname2 = split_str[1]
  11. # _的第2部分=“()+后面的内容”
  12. newname=newname1+ '.docx'
  13. oldname_path = os.path.join(path,file)
  14. # 文件新路径
  15. newname_path = os.path.join(path,newname)
  16. # 新旧对调
  17. os.rename(oldname_path, newname_path)

运行后的文件名批量转化为“姓名.docx)

二、将xls表格放入同一个文件夹内。

 excle表格内包含信息:第一列“姓名”,第二列“学号”(师训号)

 表内信息作为匹配文件名称用。非常重要。

三、套用现有代码进行替换。

直接运行以下代码

  1. # https://www.jb51.net/article/247374.htm
  2. import os
  3. import xlwings as wx
  4. import time
  5. def listdir(path, list_name): #传入存储的list
  6. for file in os.listdir(path):
  7. # 排除临时的文件
  8. if '~$' in file:
  9. continue
  10. # 取得照片清单 源文件
  11. if ".docx" in file:
  12. file_path = os.path.join(path,file)
  13. list_name.append(file_path)
  14. # 取得excel文件 修改表
  15. if ".xls" in file:
  16. index_file = os.path.join(path,file)
  17. print("数据源文件-->"+index_file)
  18. print(list_name)
  19. return index_file
  20. def getinfo(new_name,index_file): # 获取人员姓名和编号
  21. app = wx.App(visible=False, add_book=False) # 不打开baiexcel
  22. print("读取人员信息--->"+index_file)
  23. wb = app.books.open(index_file)
  24. sheet = wb.sheets[0]
  25. nrows = sheet.used_range.last_cell.row #获取最大行数
  26. ncolumns = sheet.used_range.last_cell.column #获取最大列数
  27. # 查找姓名和编号的列
  28. file_name = ""
  29. empl_name = ""
  30. empl_numb = ""
  31. ename_col = 0
  32. enumb_col = 0
  33. print("最大列数--->"+str(ncolumns)) # 2
  34. for col in range(1, ncolumns+1):
  35. if sheet.range((1,col)).value == "姓名":
  36. ename_col = col
  37. print("姓名的列--->"+str(col)) # 1
  38. if sheet.range((1,col)).value == "学号":
  39. enumb_col = col
  40. print("员工号的列--->"+str(col)) # 2
  41. # 取行中的姓名和编号
  42. for row in range(2,nrows+1):
  43. empl_name = str(sheet.range((row,ename_col)).value)
  44. empl_numb = str(sheet.range((row,enumb_col)).value)
  45. file_name = (empl_name + empl_numb).split('.')[0] # 新的名字
  46. print(file_name)
  47. new_name.append(file_name)
  48. # print(new_name)
  49. wb.close()
  50. app.quit()
  51. def change_name(file_path,new_name,list_name):
  52. # 逐个处理docx
  53. for filename in list_name: # 文件名遍历列表名单
  54. print("旧文件名"+filename) # 打印就文件名=列表名字单 路径+XXX.docx
  55. old_name = (os.path.basename(filename)).split('.')[0]# 提取老名字=XXX(无。docx)
  56. print(old_name)
  57. # 查找新名字清单中是否有此姓名
  58. for nfile in new_name: # 新文件 遍历新文件名 ,新文件名=有名字的
  59. print(nfile)
  60. if old_name in nfile: # 如果老名字在新文件内(存在)
  61. nfname = file_path+os.sep+nfile+".docx"
  62. # 新名字=路径+分隔符+名字学号+docx XX123214.docx
  63. print("新文件名"+nfname)
  64. os.rename(filename,nfname) # 替换
  65. break
  66. def main():
  67. file_path = input('输入文件夹路径:') # 文件夹位置
  68. # global(file_path)
  69. try:
  70. #读取文件夹下的所有文件
  71. List_files=[]
  72. index_file = listdir(file_path,List_files)
  73. # 读取员工姓名和员工号,组成新的文件名
  74. new_name=[]
  75. getinfo(new_name,index_file)
  76. # 修改文件名字
  77. change_name(file_path,new_name,List_files)
  78. except Exception as e:
  79. # 打印异常信息
  80. print(e)
  81. time.sleep(3)
  82. fileList=os.listdir(file_path)
  83. for file in fileList:
  84. # split_str = file.split('1')#+后面的写错了,就用这个提取前面的部分和后缀一起重新命名
  85. split_str = file[-17:]
  86. # 提取最后进修编号
  87. newname1 = split_str
  88. # newname2 = split_str[1]
  89. newname=newname1
  90. oldname_path = os.path.join(file_path,file)
  91. # 文件新路径
  92. newname_path = os.path.join(file_path,newname)
  93. # 新旧对调
  94. os.rename(oldname_path, newname_path)
  95. if __name__ == '__main__':
  96. main()

输入文件路径:复制文件所在路径

(本代码,是先将“张三.docx" 转成“张三170121122322.docx”再转成“170121122322.docx”)

运行后结果

 上传匹配情况:培训系统自动上传研究成果(师训号.docx),并显示未上传人员信息(便于补全)

 感悟:

       本次找代码并调试、添加新代码,花了2个多小时,如果人工批量修改60个文件名估计也差不多的时间。但是确定了这个代码,就能够反复运用,特别是对于大批量的数据(>100个)非常有效果(速度、精确性)。所以

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/795956
推荐阅读
相关标签
  

闽ICP备14008679号