鱼C论坛

 找回密码
 立即注册
查看: 6210|回复: 12

[已解决]提取word标题或者第一行前几个字为文件名,重名文件如何添加序号?

[复制链接]
发表于 2022-7-8 11:25:17 | 显示全部楼层
  1. import win32com.client
  2. import os

  3. count = 0
  4. app = win32com.client.DispatchEx("Word.Application")
  5. file_name=[]
  6. for path,dirs,files in os.walk(os.getcwd()):
  7.     for file in files:
  8.         if (file.split(".")[-1]=="docx" or file.split(".")[-1]=="doc" )and "$" not in file:  #只处理docx或doc文件
  9.             app.visible = False #不显示word窗口
  10.             doc = app.Documents.Open(f'{path}\{file}')   #打开文件
  11.             title=str(doc.paragraphs[0])    #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
  12.             doc.Close()    #关闭打开的文档
  13.             while True:
  14.                 try:
  15.                     if count == 0:
  16.                         os.rename(f'{path}\{file}',f"{path}\{str(title).strip()}.{file.split('.')[-1]}")   #给文件改名
  17.                     else:
  18.                         os.rename(f'{path}\{file}',f"{path}\{str(title).strip()}({count}).{file.split('.')[-1]}")
  19.                 except FileExistsError:
  20.                     count += 1
  21.                 else:
  22.                     count = 0
  23.                     break
  24.             
  25.     break #只处理当前目录,所以第一项完成后退出
  26. app.Quit()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-8 12:17:20 | 显示全部楼层
sjjy1813 发表于 2022-7-8 12:11
棒棒的,大神,还遇到个问题,就是首段里如果包含了*\?这种字符的情况,这样的首行就不能作为文档名了, ...

可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-8 12:26:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 临时号 于 2022-7-8 12:28 编辑

如果还有一些不能作为文件名的字符,可以直接在remove_str那里添加
  1. import win32com.client
  2. import os

  3. count = 0
  4. remove_str = r"*\<>?"
  5. app = win32com.client.DispatchEx("Word.Application")
  6. file_name=[]
  7. for path,dirs,files in os.walk(os.getcwd()):
  8.     for file in files:
  9.         if (file.split(".")[-1]=="docx" or file.split(".")[-1]=="doc" )and "$" not in file:  #只处理docx或doc文件
  10.             app.visible = False #不显示word窗口
  11.             doc = app.Documents.Open(f'{path}\{file}')   #打开文件
  12.             title=str(doc.paragraphs[0])    #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
  13.             doc.Close()    #关闭打开的文档
  14.             for r in remove_str:
  15.                 if r in title:
  16.                     title = title.replace(r,'')
  17.             while True:
  18.                 try:
  19.                     if count == 0:
  20.                         os.rename(f'{path}\{file}',f"{path}\{str(title).strip()}.{file.split('.')[-1]}")   #给文件改名
  21.                     else:
  22.                         os.rename(f'{path}\{file}',f"{path}\{str(title).strip()}({count}).{file.split('.')[-1]}")
  23.                 except FileExistsError:
  24.                     count += 1
  25.                 else:
  26.                     count = 0
  27.                     break
  28.             
  29.     break #只处理当前目录,所以第一项完成后退出
  30. app.Quit()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-8 12:33:41 | 显示全部楼层
sjjy1813 发表于 2022-7-8 12:20
再次厚颜,请大神帮忙改下了

代码在9#
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 16:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表