记录一次Python批量处理doc文件

起因

团委要求写团员登记表,大家填完汇聚后的几天因为有些人不合格所以决定全班各自打印自己的表格,所以把全班的登记表都上传到群里,感觉很可怕,决定分析一下数据

方案

  1. 将doc转换txt
  2. 逐行读取txt文件
  3. 通过比对关键词,发现关键词就把当前行写入汇总的文件

准备

win32com

网上找资料时发现如果你处理的doc文件是docx的话,你可以直接用python-docx但是我发现都是doc,所以没啥用
看到v2ex有人说用unoconv弄了半天,发现是在*nix的系统下的东西,我用的是win10所以也没啥用
最后找到win32com这个诡异的名字,然后弄了半天,硬是不知道怎么下,后来发现是Python for Windows Extensions简写pywin32下完包就可以importwin32com
基本转换方式

from win32com import client
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open('e:\test\38.doc')
doc.SaveAs('e:\test\38.txt', 2)
doc.Close()
word.Quit()

可以转换成多种格式保存

wdFormatDocument =  0
wdFormatDocument97 =  0
wdFormatDocumentDefault = 16
wdFormatDOSText =  4
wdFormatDOSTextLineBreaks =  5
wdFormatEncodedText =  7
wdFormatFilteredHTML = 10
wdFormatFlatXML = 19
wdFormatFlatXMLMacroEnabled = 20
wdFormatFlatXMLTemplate = 21
wdFormatFlatXMLTemplateMacroEnabled = 22
wdFormatHTML =  8
wdFormatPDF = 17
wdFormatRTF =  6
wdFormatTemplate =  1
wdFormatTemplate97 =  1
wdFormatText =  2
wdFormatTextLineBreaks =  3
wdFormatUnicodeText =  7
wdFormatWebArchive  =  9
wdFormatXML = 11
wdFormatXMLDocument  = 12
wdFormatXMLDocumentMacroEnabled = 13
wdFormatXMLTemplate  = 14
wdFormatXMLTemplateMacroEnabled = 15
wdFormatXPS = 18

相关的文件处理

文件操作

开始写的时候,发现对关于文件的操作都忘了差不多了,又要重新去Google了下,需要对获取当前目前了所有文件,和获取当前路径,找到发现都是在os包里
os包
os.sep 可以取代操作系统特定的路径分割符。
os.name 字符串指示你正在使用的平台。比如对于 Windows,它是'nt',而对于 Linux/Unix 用户,它是'posix'。
os.getcwd() 函数得到当前工作目录,即当前 Python 脚本工作的目录路径。
os.getenv() 和 os.putenv() 函数分别用来读取和设置环境变量。
os.remove() 函数用来删除一个文件。
os.system() 函数用来运行 shell 命令。
os.linesep 字符串给出当前平台使用的行终止符。例如,Windows 使用'\r\n',Linux 使用'\n'而 Mac 使用'\r'。
os.path.split() 函数返回一个路径的目录名和文件名。
os.path.isfile() 和 os.path.isdir() 函数分别检验给出的路径是一个文件还是目录。
os.listdir(dirname):列出 dirname 下的目录和文件
os.curdir: 返回但前目录('.')
os.chdir(dirname): 改变工作目录到 dirname
os.path.isdir(name): 判断 name 是不是一个目录,name 不是目录就返回 false
os.path.isfile(name): 判断 name 是不是一个文件,不存在 name 也返回 false
os.path.exists(name): 判断是否存在文件或目录 name
os.path.getsize(name): 获得文件大小,如果 name 是目录返回 0L
os.path.abspath(name): 获得绝对路径
os.path.normpath(path): 规范 path 字符串形式
os.path.split(name): 分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext(): 分离文件名与扩展名
os.path.join(path,name): 连接目录与文件名或目录
os.path.basename(path): 返回文件名
os.path.dirname(path): 返回文件路径

字符串操作

我还需要的操作是如果关键词出现的就把它写入新的文件,再StackOverflow里找到了一个方法any()

any() 函数用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True。

StackOverflow里的方法是

if any(x in str for x in a):

如果有一个是true就返回true
一切就绪就开始处理了

开始处理

整个代码

from win32com import client
import os
word = client.Dispatch("Word.Application")
files = os.listdir(".");
key_word=["姓  名" , "籍  贯","居民","现居","省","市","父亲","母亲","姐姐","弟弟","群众","党员","就读","小学","中学","学院"]
wf = open("all.txt","a")


for file_name in os.listdir("."):
    print("open",os.getcwd() +"\\" + file_name)
    if not (file_name.endswith("doc")):
        print("pass")
        continue
    doc = word.Documents.Open(os.getcwd()+"\\" + file_name)
    file_path = os.getcwd()+ file_name[0:file_name.index("附件3")]+".txt"
    doc.SaveAs(file_path,2)
    with open(file_path,"r") as f:
        for line in f.readlines():
            if any(x for x in key_word if x in line):
                wf.write(line)
        wf.write("------------------------------------------------\n")
doc.Close()
word.Quit()

最后的成果


口怕

引用

http://blog.csdn.net/pipisorry/article/details/50368044
http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html
https://stackoverflow.com/questions/3389574/check-if-multiple-strings-exist-in-another-string
http://www.runoob.com/python/python-func-any.html

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容