Python检查word文件中的特殊标记词是否与文件名中的一致
公司的部分文件分为“内部”和“外部”。正常情况下,这个标识在文件名及文件首页左上角都有标注。然鹅,有时候操作一下,忘记改了,或者忘记标注了。就需要回头去一个一个地整理,非常麻烦。这种重复的,繁杂的操作,尽快冲Python来,人类还是应该多做做其它更有意思的事。
代码:
import os
from win32com import client as wc # 导入模块
import docx
from docx.shared import Pt # 用于设定字体大小(磅值)
from docx.oxml.ns import qn # 用于应用中文字体
# 将文件夹内的所有doc转存为docx文件
path = os.getcwd() + "\\文件\\" # 文件夹绝对路径
files = []
for file in os.listdir(path):
if file.endswith(".doc"): # 排除文件夹内的其他干扰文件,只获取".doc"后缀的word文件
files.append(path+file)
word = wc.Dispatch("Word.Application") # 打开word应用程序
for file in files:
doc = word.Document(file) # 打开word文件
doc.SaveAs("{}x".format(file), 12) # 另存为后缀为".docx"的文件,其中参数12指docx文件
doc.Close() # 关闭原来word文件
word.Quit()
for file in files: # 删除doc文件
os.remove(file)
# 获取所有docx文件路径
docx_files = []
for file in os.listdir(path): # 排除文件夹内的其它干扰文件,只获取".doc"后缀的word文件
if file.endswith(".docx"):
docx_files.append(path+file)
counter = 0 # 计数器,用于记录有多少文件没被处理
for file in docx_files:
file_head = file.split('.')[0].rstrip() # 文件名头,类似这样的“C:\\Users\\文件\\测试”
file_tail = file.split('\\')[-1] # 文件名尾,类似这样“测试.docx”
mark_words = ["公开", "内部"]
mark_fileName = file_head[-3:-1] # 文件名中倒数第2,3个文字
doc = docx.Document(file)
mark_doc = doc.paragraphs[0].text # 文件中首段文字
# 比对标记词
if mark_doc in mark_words: # 判断文件中有无标记
if mark_fileName in mark_words: # 判断文件名中有无标记
if mark_doc == mark_fileName: # 如果二者标记相同
counter += 1
pass
else: # 二者标记不同
os.rename(file, file.replace(mark_fileName, mark_doc)) # 重命名文件
print(f"【{file_tail}】文件名重命名标识为【{mark_doc}】")
else:
os.rename(file, f"{file_head}({mark_doc}).docx") # 文件名中无标记,则加标记
print(f"【{file_tail}】文件名增加标识为【{mark_doc}】")
else:
# 文中无标记,则在首段前插入一段,写入标记
p = doc.paragraphs[0]
pNew = p.insert_paragraph_before()
run = pNew.add_run(mark_words[0]) # 写为“公开”
# 字体设置
run.font.size = Pt(16)
run.font.name = "黑体"
r = run._element.rPr.rFonts
r.set(qn("w:eastAsia"), "黑体")
doc.save(file)
print(f"【{file_tail}】内容增加标识为【{mark_words[0]}】")
if mark_fileName in mark_words: # 查看文件名中是否有标记
if mark_fileName == mark_words[0]: # 标记是否为“公开”
pass
else: # 标记不是“公开”则替换
os.rename(file, file.replace(mark_fileName, mark_words[0])) # 重命名文件
print(f"【{file_tail}】文件名重命名标识为【{mark_words[0]}】")
else:
os.rename(file, f"{file_head}({mark_words[0]}).docx") # 文件名中无标记,则加标记
print(f"【{file_tail}】文件名增加标识为【{mark_words[0]}】")
print(f"完成!共检查{len(docx_files)}个文件,处理了 {len(docx_files) - counter} 个文件。")