公司的部分文件分为“内部”和“外部”。正常情况下,这个标识在文件名及文件首页左上角都有标注。然鹅,有时候操作一下,忘记改了,或者忘记标注了。就需要回头去一个一个地整理,非常麻烦。这种重复的,繁杂的操作,尽快冲Python来,人类还是应该多做做其它更有意思的事。

共有如下7种情况,其对应的处理方式如下表格所示。

在处理文档之前,发现还有很多是.doc为后缀的文件。由于docx库不支持这些文件,所以需要先将它们批量转换成.docx文件。程序如下。细节请参考实例15。在完成转换后,用os.remove()将老破小的doc文件全部删除。

#将文件夹内的所有doc转存为docx文件import os #用于获取目标文件所在路径path=os.getcwd()+"\\文件\\" # 文件夹绝对路径files=[]for file in os.listdir(path):    if file.endswith(".doc"): #排除文件夹内的其它干扰文件,只获取".doc"后缀的word文件        files.append(path+file) 

from win32com import client as wc #导入模块word = wc.Dispatch("Word.Application") # 打开word应用程序for file in files:    doc = word.Documents.Open(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文件路径全部获取,存入列表docx_files。

#获取所有docx文件路径docx_files=[]for file in os.listdir(path):    if file.endswith(".docx"): #排除文件夹内的其它干扰文件,只获取".doc"后缀的word文件        docx_files.append(path+file) docx_files>>['C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试.docx', 'C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试1(公开).docx', 'C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试2(内部).docx', 'C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试3(公开).docx', 'C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试4(公开).docx', 'C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试5(内部).docx', 'C:\\Users\\python_excel\\实例59_Python检查word文件中的特殊标记词是否与文件名中的一致\\文件\\测试6.docx']

然后开始憋最后的大招,写整理文件的程序了。先导入相关的库。建一个计数器counter,令其初始值为0。这个计数器用于记录有多少文件没有被处理,然后用文件的总数减去它,就能得到处理过的文件数量。为什么不直接记录处理过的文件的数量呢?因为处理的操作太多,比较混乱,计数麻烦,所以曲线救国更方便。

然后遍历待检查的所有文件,逐个进行处理。先用split()按"."拆分出文件头file_head,并用rstrip()去除尾部可能的空格;按"\"拆分出文件尾file_tail。比如“C:\Users\文件\测试.docx”拆出的头是“C:\Users\文件\测试”,尾是“测试.docx”。这个后面重命名文件的时候会用到。

将要用到的标记词“公开”和“内部”放入列表mark_words以便后续调用。因为文件头中有标记词的话,倒数第三个加第二个就是,因此按此取数存入字符串mark_fileName。然后使用docx.Document()打开该文件,提出首段paragraphs[0]中的文本,存入mark_doc。如果文档中有标记词的话,mark_doc的值就应该是“公开”或“内部”,否则就是其他字符了。

标记词提取好了,就开始比对了,然后根据比对的结果采取对应的操作。以文档中是否有关键词,分为两种大的情况。

如果文档中有标记词,再判断文件名中有无标记词,如果有的话,则将其跟文档中的进行比对,如果二者一致,则计数器加1,并通过pass跳过后面的所有判断,回到for循环,进行下一个文件的检查。如果二者标记词不同,则按照文档中的标记词重命名文件。如果文件名中无标记词,则给文件名加上标记词。

如果文档中无标记词,则直接在文档首段前插入一段,并写入“公开”二次,并设置字体为黑体,大小为16磅,并保存文件。然后再判断文件名中是否有标记词,有的话再判断是否为“公开”,若是,则直接pass;若不是,则替换成“公开”。如果文件名中无标记词,则按“公开”标记词重命名文件。

以上,只要有一步有对文件或文件名有操作,则通过print显示操作内容,以便我们知道做了哪些更改。最后显示检查过的文件和处理过的文件的个数。

import docxfrom docx.shared import Pt #用于设定字体大小(磅值)from docx.oxml.ns import qn #用于应用中文字体

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} 个文件。")>>【测试.docx】文件名增加标识为【内部】【测试1(公开).docx】文件名重命名标识为【内部】【测试4(公开).docx】内容增加标识为【公开】【测试5(内部).docx】内容增加标识为【公开】【测试5(内部).docx】文件名重命名标识为【公开】【测试6.docx】内容增加标识为【公开】【测试6.docx】文件名增加标识为【公开】完成!共检查7个文件,处理了 5 个文件。

到此,程序圆满完成任务,运行前和运行后的文件如下所示。可以看到,“测试.doc”文件被转换成了“.docx”文件,且按照文件里面的标记词“内部”重新命名了。其它几个测试文件也做了相应的修正。

如果您有需要处理的问题,可发邮件到邮箱:donyo@qq.com,一起探讨解决方案。微信公众号输入“源文件”提取所有源文件及资料。

喜欢此文,点亮“在看”!

elupload获取文件名与路径_Python检查word文件中的特殊“标记”词是否与文件名中的一致(实例59)...相关推荐

  1. python docx 合并文档 图片_Python检查Word文件中包含特定关键字的所有页码

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社图书详情:配套资源:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系 ...

  2. Python检查Word文件中包含特定关键字的所有页码

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: 配套资源: 用书教师可以联系董老师获取教学大纲.课件.源码.教案. ...

  3. python文件目录无权限_python检查目录文件权限并修改目录文件权限的操作

    我就废话不多说了,还是直接看代码吧! # -*- coding: utf-8 -*- # @author flynetcn import sys, os, pwd, stat, datetime; L ...

  4. python word排版_Python控制Word文件中段落格式与文本格式

    本文主要介绍扩展库python-docx中关于Word文件中文本格式控制的接口和用法,可以使用命令pip install python-docx安装,然后通过名字docx来使用其中提供的功能. 1.设 ...

  5. java获取默认下载路径吗_java下载文件到浏览器默认路径

    java下载文件到浏览器默认路径 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog..net/mengmeng2222222 一.controller层代码: @Requ ...

  6. python读word表格_python读取word文件里的表格。

    因为power bi desktop支持了python.借用了python将word文件里的表格读取到power bi里面. python这部分的代码如下.说明一下:用了docx库,这个库不支持doc ...

  7. python怎么输入文件路径_python怎么打开文件的路径?

    python怎么打开文件的路径? python打开文件路径的方法: 1.我们知道用绝对路径打开一个文件.f=open('c:/Users/Administrator/Desktop/2.txt','r ...

  8. input file获取文件路径_python 基础 — 整理文件

    点击上方蓝字"Python圈子",进行关注~ 前言 文件整理常常会浪费很多时间.但如果让机器来做这样复杂的事情,不到 10 秒钟就能完成 1 个小时工作. 整理方式 进行文件整理最 ...

  9. python分离文件名和路径_python 分离文件名和路径以及分离文件名和后缀的方法...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. Selenium测试专项三班隆重开班
  2. C语言标准数学函数库math.h之常用函数介绍
  3. Heinz College of Information Systems and Public Policy Carnegie Mellon University
  4. mysql字节对齐_结构体字节对齐(转)
  5. twitter api_Java应用程序上的Twitter API
  6. NOIP模拟测试16「Drink·blue·weed」
  7. Java元组Tuple介绍与使用
  8. c语言随机函数怎么循环,如何在C ++循环中生成不同的随机数?
  9. Java基础学习总结(39)——Log4j 1使用教程
  10. 一个FLASH小游戏----Redball3
  11. Illustrator 教程,如何在 Illustrator 中变换图稿?
  12. Intel 64 Memory ordering principles
  13. 8086cpu 计算机,基于8086 CPU 的单芯片计算机系统的设计
  14. 《Zero to One》读书笔记
  15. 亨嘉之会话数据行业未来 万字长文解码2021数据技术嘉年华
  16. mysql的填充因子_数据库的索引和填充因子fillfactor
  17. 华硕PRIME Z390-P主板设置开启虚拟化技术
  18. Shopee跨境电商怎么快速铺货?要用什么软件上货?
  19. revit二次开发lookup和addin的详细安装教程
  20. 【待解决的难题】在网页端下载淘宝直播视频

热门文章

  1. EL表达式(Exprission language)
  2. Oracle中split功能的实现
  3. 转:Mac文件权限操作详细记录
  4. ES6--Let 和 const 命令
  5. getComputedStyle与currentStyle获取样式(style/class)
  6. iOS开发--一步步教你彻底学会『iOS应用间相互跳转』
  7. .Net MVC 自定义Action类型,XmlAction,ImageAction等
  8. ThinkPHP源码学习之一
  9. ORA-00257归档日志写满的解决方法 - xwdreamer - 博客园
  10. 【干货】一张蓝图九大行动领域,实现AI赋能的企业转型-IBM.pdf(附下载链接)...