鱼C论坛

 找回密码
 立即注册
查看: 5191|回复: 48

如何实现提取word标题或者第一行前几个字为文件名

[复制链接]
发表于 2021-11-29 16:28:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

同一文件目录下
如何实现提取word标题或者第一行前几个字为文件名

这个可以做吗,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-29 17:24:43 | 显示全部楼层
本帖最后由 lightninng 于 2021-11-29 17:26 编辑

正好最近研究了下python-docx库

  1. import docx  #命令行中输如pip install python-docx安装该库
  2. import os
  3. for path,dirs,files in os.walk("."):
  4.     for file in files:
  5.         if file.split(".")[-1]=="docx":  #只处理docx文件
  6.             doc = docx.Document(file)    #打开docx文件
  7.             title=doc.paragraphs[0].text    #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
  8.             os.rename(file,title+".docx")   #重命名

  9.     break   #只处理当前目录,所以第一项完成后退出
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-29 18:52:33 | 显示全部楼层
lightninng 发表于 2021-11-29 17:24
正好最近研究了下python-docx库

是doc怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-29 19:10:04 | 显示全部楼层
lightninng 发表于 2021-11-29 17:24
正好最近研究了下python-docx库

报错
docx.opc.exceptions.PackageNotFoundError: Package not found at
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 20:46:27 | 显示全部楼层
swanseabrian 发表于 2021-11-29 19:10
报错
docx.opc.exceptions.PackageNotFoundError: Package not found at

这个模块处理不了doc,报错原因可能性最大的是,你的word文档里面没有内容吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-29 21:09:30 | 显示全部楼层
lightninng 发表于 2021-11-29 20:46
这个模块处理不了doc,报错原因可能性最大的是,你的word文档里面没有内容吧~

doc怎么办呢 你的问题是差个 os.path.join
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 21:10:48 | 显示全部楼层
swanseabrian 发表于 2021-11-29 21:09
doc怎么办呢 你的问题是差个 os.path.join

不用join也可以,相对路径没有问题,当然你用绝对路径也可以
doc没处理过,上网找找相对应的库怎么用呗,这点事,倒腾两下还不解决了~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 21:13:38 | 显示全部楼层
本帖最后由 lightninng 于 2021-11-29 21:14 编辑
swanseabrian 发表于 2021-11-29 21:09
doc怎么办呢 你的问题是差个 os.path.join


我给你找了一个
https://textract.readthedocs.io/en/stable/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-29 21:15:32 | 显示全部楼层
lightninng 发表于 2021-11-29 21:10
不用join也可以,相对路径没有问题,当然你用绝对路径也可以
doc没处理过,上网找找相对应的库怎么用呗 ...

不join就找 不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 21:19:53 | 显示全部楼层

好吧,我这里不知道为什么没啥问题,
刚百度到另一个间接解决doc的方法
https://blog.csdn.net/weixin_40449300/article/details/79143971
楼主,你慢慢研究,我去吃饭了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-29 21:27:56 | 显示全部楼层
lightninng 发表于 2021-11-29 21:13
我给你找了一个
https://textract.readthedocs.io/en/stable/

这个怎么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 23:35:30 | 显示全部楼层

你还没解决啊,自己多百度啊~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-30 12:18:26 | 显示全部楼层


有时间了,我来送佛送到西了~~
  1. import win32com.client
  2. import os

  3. app = win32com.client.DispatchEx("Word.Application")
  4. file_name=[]
  5. for path,dirs,files in os.walk(os.getcwd()):
  6.     for file in files:
  7.         if (file.split(".")[-1]=="docx" or file.split(".")[-1]=="doc" )and "$" not in file:  #只处理docx或doc文件
  8.             app.visible = False #不显示word窗口
  9.             doc = app.Documents.Open(f'{path}\{file}')   #打开文件
  10.             title=str(doc.paragraphs[0])    #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
  11.             doc.Close()    #关闭打开的文档
  12.             os.rename(f'{path}\{file}',f"{path}\{str(title).strip()}.{file.split('.')[-1]}")   #给文件改名
  13.             
  14.     break #只处理当前目录,所以第一项完成后退出
  15. app.Quit()
  16.         
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 12:34:27 | 显示全部楼层
lightninng 发表于 2021-11-30 12:18
有时间了,我来送佛送到西了~~

报错
  1.     doc = app.Documents.Open(os.path.join(path1, file))  # 打开文件
  2.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\site-packages\win32com\client\dynamic.py", line 554, in __getattr__
  3.     raise AttributeError("%s.%s" % (self._username_, attr))
  4. AttributeError: <unknown>.Open
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 12:35:15 | 显示全部楼层
lightninng 发表于 2021-11-30 12:18
有时间了,我来送佛送到西了~~

我想转化成docx再改名,为啥我转换全失败了呢
  1. import docx  #命令行中输如pip install python-docx安装该库
  2. from docx import Document
  3. from win32com import client as wc
  4. import os
  5. path1 = r'C:\Users\Administrator\Desktop\bat\doc标题文件名'
  6. path2 = r'C:\Users\Administrator\Desktop\1130'

  7. def doc_to_docx(file):

  8.     word_doc = word_app.Documents.Open(file)  # 打开doc后缀名的文件
  9.     # word_doc.SaveAs(docxUrl + "/" + fileName.split("/")[-1].split(".")[0] + ".docx", 12)
  10.     word_doc.SaveAs("{}x".format(file), 12)  # 另存为后缀为".docx"的文件,其中参数12或16指docx文件
  11.     word_doc.Close()  # 关闭原来的doc后缀名文件
  12.     # word_app.Quit()

  13. word_app = wc.Dispatch("Word.Application")
  14. for path,dirs,files in os.walk(path2):
  15.     for file in files:
  16.         print(file)
  17.         if file.split(".")[-1]=="doc":
  18.             try:
  19.             #只处理docx文件

  20.                 doc_to_docx(file)
  21.                 print(print(file + "转化成功"))
  22.             except:

  23.                 print(file + "转化失败")
  24.         #
  25.         #
  26.         #     # print(os.path.join(path1, file))
  27.             # doc = textract.process(os.path.join(path1, file))    #打开docx文件
  28.             # title=doc.paragraphs[0].text    #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
  29.             # os.rename(os.path.join(path1, file),os.path.join(path1,title+".docx"))   #重命名
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-30 12:44:36 | 显示全部楼层
本帖最后由 lightninng 于 2021-11-30 12:46 编辑


哥。。。我代码里面没有你这一句啊。。。。
doc = app.Documents.Open(os.path.join(path1, file))


我的代码win10 x64 python3.7测试没问题,路径我也换成绝对路径了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-30 12:45:40 | 显示全部楼层
swanseabrian 发表于 2021-11-30 12:35
我想转化成docx再改名,为啥我转换全失败了呢

既然用了win32就没必要转化了啊。直接读去文件内容就行了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 12:52:15 | 显示全部楼层
lightninng 发表于 2021-11-30 12:44
哥。。。我代码里面没有你这一句啊。。。。
doc = app.Documents.Open(os.path.join(path1, file))
...

用你那句,报的错误 是一样的,你那句的意思不也是加路径吗,跟我这句一样吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-30 12:55:21 | 显示全部楼层
swanseabrian 发表于 2021-11-30 12:52
用你那句,报的错误 是一样的,你那句的意思不也是加路径吗,跟我这句一样吧

哥。这种程序调试问题自己先试一下,你试试把你传入的参数打印出来看一下啊,我这遍没有path1直接从当前文件夹读取的文件名和路径,没有问题,那问题自然处在你这个路径上啊,自己先排查一下吧,我先吃个饭,有时间再来~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 12:55:53 | 显示全部楼层
lightninng 发表于 2021-11-30 12:44
哥。。。我代码里面没有你这一句啊。。。。
doc = app.Documents.Open(os.path.join(path1, file))
...

我是Python38-32 win10 64应该跟这个没关系吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 06:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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