如何实现提取word标题或者第一行前几个字为文件名
同一文件目录下
如何实现提取word标题或者第一行前几个字为文件名
这个可以做吗,谢谢 本帖最后由 lightninng 于 2021-11-29 17:26 编辑
正好最近研究了下python-docx库
import docx#命令行中输如pip install python-docx安装该库
import os
for path,dirs,files in os.walk("."):
for file in files:
if file.split(".")[-1]=="docx":#只处理docx文件
doc = docx.Document(file) #打开docx文件
title=doc.paragraphs.text #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
os.rename(file,title+".docx") #重命名
break #只处理当前目录,所以第一项完成后退出 lightninng 发表于 2021-11-29 17:24
正好最近研究了下python-docx库
是doc怎么办 lightninng 发表于 2021-11-29 17:24
正好最近研究了下python-docx库
报错
docx.opc.exceptions.PackageNotFoundError: Package not found at swanseabrian 发表于 2021-11-29 19:10
报错
docx.opc.exceptions.PackageNotFoundError: Package not found at
这个模块处理不了doc,报错原因可能性最大的是,你的word文档里面没有内容吧~ lightninng 发表于 2021-11-29 20:46
这个模块处理不了doc,报错原因可能性最大的是,你的word文档里面没有内容吧~
doc怎么办呢 你的问题是差个 os.path.join swanseabrian 发表于 2021-11-29 21:09
doc怎么办呢 你的问题是差个 os.path.join
不用join也可以,相对路径没有问题,当然你用绝对路径也可以
doc没处理过,上网找找相对应的库怎么用呗,这点事,倒腾两下还不解决了~~~ 本帖最后由 lightninng 于 2021-11-29 21:14 编辑
swanseabrian 发表于 2021-11-29 21:09
doc怎么办呢 你的问题是差个 os.path.join
我给你找了一个
https://textract.readthedocs.io/en/stable/
lightninng 发表于 2021-11-29 21:10
不用join也可以,相对路径没有问题,当然你用绝对路径也可以
doc没处理过,上网找找相对应的库怎么用呗 ...
不join就找 不到 swanseabrian 发表于 2021-11-29 21:15
不join就找 不到
好吧,我这里不知道为什么没啥问题,
刚百度到另一个间接解决doc的方法
https://blog.csdn.net/weixin_40449300/article/details/79143971
楼主,你慢慢研究,我去吃饭了~~ lightninng 发表于 2021-11-29 21:13
我给你找了一个
https://textract.readthedocs.io/en/stable/
这个怎么用 swanseabrian 发表于 2021-11-29 21:27
这个怎么用
你还没解决啊,自己多百度啊~~~ swanseabrian 发表于 2021-11-29 21:27
这个怎么用
有时间了,我来送佛送到西了~~
import win32com.client
import os
app = win32com.client.DispatchEx("Word.Application")
file_name=[]
for path,dirs,files in os.walk(os.getcwd()):
for file in files:
if (file.split(".")[-1]=="docx" or file.split(".")[-1]=="doc" )and "$" not in file:#只处理docx或doc文件
app.visible = False #不显示word窗口
doc = app.Documents.Open(f'{path}\{file}') #打开文件
title=str(doc.paragraphs) #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
doc.Close() #关闭打开的文档
os.rename(f'{path}\{file}',f"{path}\{str(title).strip()}.{file.split('.')[-1]}") #给文件改名
break #只处理当前目录,所以第一项完成后退出
app.Quit()
lightninng 发表于 2021-11-30 12:18
有时间了,我来送佛送到西了~~
报错
doc = app.Documents.Open(os.path.join(path1, file))# 打开文件
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\site-packages\win32com\client\dynamic.py", line 554, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.Open lightninng 发表于 2021-11-30 12:18
有时间了,我来送佛送到西了~~
我想转化成docx再改名,为啥我转换全失败了呢
import docx#命令行中输如pip install python-docx安装该库
from docx import Document
from win32com import client as wc
import os
path1 = r'C:\Users\Administrator\Desktop\bat\doc标题文件名'
path2 = r'C:\Users\Administrator\Desktop\1130'
def doc_to_docx(file):
word_doc = word_app.Documents.Open(file)# 打开doc后缀名的文件
# word_doc.SaveAs(docxUrl + "/" + fileName.split("/")[-1].split(".") + ".docx", 12)
word_doc.SaveAs("{}x".format(file), 12)# 另存为后缀为".docx"的文件,其中参数12或16指docx文件
word_doc.Close()# 关闭原来的doc后缀名文件
# word_app.Quit()
word_app = wc.Dispatch("Word.Application")
for path,dirs,files in os.walk(path2):
for file in files:
print(file)
if file.split(".")[-1]=="doc":
try:
#只处理docx文件
doc_to_docx(file)
print(print(file + "转化成功"))
except:
print(file + "转化失败")
#
#
# # print(os.path.join(path1, file))
# doc = textract.process(os.path.join(path1, file)) #打开docx文件
# title=doc.paragraphs.text #获取第一段内容(也就是第一行,word中回车分隔的就是不同段落)
# os.rename(os.path.join(path1, file),os.path.join(path1,title+".docx")) #重命名 本帖最后由 lightninng 于 2021-11-30 12:46 编辑
swanseabrian 发表于 2021-11-30 12:34
报错
哥。。。我代码里面没有你这一句啊。。。。
doc = app.Documents.Open(os.path.join(path1, file))
我的代码win10 x64 python3.7测试没问题,路径我也换成绝对路径了~~ swanseabrian 发表于 2021-11-30 12:35
我想转化成docx再改名,为啥我转换全失败了呢
既然用了win32就没必要转化了啊。直接读去文件内容就行了啊 lightninng 发表于 2021-11-30 12:44
哥。。。我代码里面没有你这一句啊。。。。
doc = app.Documents.Open(os.path.join(path1, file))
...
用你那句,报的错误 是一样的,你那句的意思不也是加路径吗,跟我这句一样吧 swanseabrian 发表于 2021-11-30 12:52
用你那句,报的错误 是一样的,你那句的意思不也是加路径吗,跟我这句一样吧
哥。这种程序调试问题自己先试一下,你试试把你传入的参数打印出来看一下啊,我这遍没有path1直接从当前文件夹读取的文件名和路径,没有问题,那问题自然处在你这个路径上啊,自己先排查一下吧,我先吃个饭,有时间再来~~~ lightninng 发表于 2021-11-30 12:44
哥。。。我代码里面没有你这一句啊。。。。
doc = app.Documents.Open(os.path.join(path1, file))
...
我是Python38-32 win10 64应该跟这个没关系吧