记录⼀次Python批量处理doc⽂件
起因
团委要求写团员登记表,⼤家填完汇聚后的⼏天因为有些⼈不合格所以决定全班各⾃打印⾃⼰的表格,所以把全班的登记表都上传到⾥,感觉很可怕,决定分析⼀下数据
⽅案
1. 将doc转换txt
2. 逐⾏读取txt⽂件
3. 通过⽐对关键词,发现关键词就把当前⾏写⼊汇总的⽂件
准备
win32com
⽹上资料时发现如果你处理的doc⽂件是docx的话,你可以直接⽤python-docx但是我发现都是doc,所以没啥⽤
看到v2ex有⼈说⽤unoconv弄了半天,发现是在*nix的系统下的东西,我⽤的是win10所以也没啥⽤
最后到win32com这个诡异的名字,然后弄了半天,硬是不知道怎么下,后来发现是Python for Windows Extensions简写pywin32下完包就可以import win32com
基本转换⽅式
from win32com import client
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open('e:\test\38.doc')
doc.SaveAs('e:\', 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
python怎么读取py文件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.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
ists(name): 判断是否存在⽂件或⽬录 name
size(name): 获得⽂件⼤⼩,如果 name 是⽬录返回 0L
os.path.abspath(name): 获得绝对路径
path(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("","a")
for file_name in os.listdir("."):
print("open",os.getcwd() +"\\" + file_name)
if not (dswith("doc")):
print("pass")
continue
doc = word.Documents.wd()+"\\" + 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 adlines():
if any(x for x in key_word if x in line):
wf.write(line)
wf.write("------------------------------------------------\n")
doc.Close()
word.Quit()
最后的成果
作者:⽊豚
链接:www.jianshu/p/d115286568e9
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。