最近写了一个批量重命名word文档的python程序,能够将指定文件夹下的全部word文档重命名,命名规则是提取文档内的文字作为新的文件名,具体代码如下:
import os
import win32com.client as win32
fileName = []
m=0
folder_path = input("请输入要读取的文件夹路径(格式:F:/文件夹名字/):")
new_folder_path = input("请输入要保存的文件夹路径(格式:F:/文件夹名字/):")
hang = input("请输入要读取第几行来命名文档:")
# 循环遍历文件夹中的所有docx文件
for filename in os.listdir(folder_path):
m=m+1
if filename.endswith('.docx'):
# 使用win32com对象读取word文档,提取文档第一行并作为新文档名
word = win32.Dispatch('Word.Application')
doc = word.Documents.Open(os.path.join(folder_path, filename))
new_filename = doc.Paragraphs(hang).Range.Text.strip() + '.docx'
for i in fileName:
if i==new_filename:
new_filename=doc.Paragraphs(hang).Range.Text.strip() + '1'*m + '.docx'
fileName.append(new_filename)
doc.Close()
# 另存为新文档
new_doc_path = os.path.join(new_folder_path, new_filename)
old_doc_path = os.path.join(folder_path, filename)
os.rename(old_doc_path, new_doc_path)
for filename in os.listdir(folder_path):
m=m+1
if filename.endswith('.doc'):
# 使用win32com对象读取word文档,提取文档第一行并作为新文档名
word = win32.Dispatch('Word.Application')
doc = word.Documents.Open(os.path.join(folder_path, filename))
new_filename = doc.Paragraphs(hang).Range.Text.strip() + '.doc'
for i in fileName:
if i==new_filename:
new_filename=doc.Paragraphs(hang).Range.Text.strip() + '1'*m + '.doc'
fileName.append(new_filename)
doc.Close()
# 另存为新文档
new_doc_path = os.path.join(new_folder_path, new_filename)
old_doc_path = os.path.join(folder_path, filename)
os.rename(old_doc_path, new_doc_path)
原本的想法是想要提取word文档的指定行作为新文件名的,后来发现只能定向提取段落,就只能以对应段落来命名了。通常可以选择第一段也就是文章标题作为文件名字,倒是也不影响使用。
程序中加入了重复命名检测机制,防止遇到两个文档名字相同的情况。主程序执行了两遍,可以把docx和doc文档都给重命名
目前发现一个bug就是遇到word文档名中包含空格时会报错,排除了好久也没搞定,所以在使用该代码时需要提前把文档名包含空格的提前剔除