请注意,本文编写于 1601 天前,最后修改于 1601 天前,其中某些信息可能已经过时。
又是连续两三天没有更新博客了,虽然有和同学出去玩耍的成分,但是最主要的时间还是花在了这个脚本上。这个工作是母上大人布置的,原因是退休职工需要移交社会,所以母上大人就要为社会那边准备材料。但是材料的形式又很有意思,是一个大量表格的大word文档,每个表格都记录着一个退休职工的基本信息,但是社会那边需要一个电子表格。但是总不能让我母上大人带着手底下的人一个一个敲吧!于是就想让我给她整一个自动化的程序来处理这个问题。为啥这个专题是2,而不是1.原因很简单,因为我之前也帮她解决过类似的事件,上次是筛选没有提交照片人的名单。但是我没有写到博客里面,但是这次在次当我需要处理电子表格的时候,发现手上没有资料可以查阅。所以这次就将这次经历写到这里,以便下次进行参考。
由于是一个筛选的程序,所以在一张大表格中我们只需要16个数据,分别是DATA=["编号","姓名","户籍所在地","现居住地","异地居住地","配偶姓名","配偶原工作单位","第一家庭联系人姓名","第一家庭联系人工作单位","第一家庭联系人关系","第一家庭联系人联系方式","第二家庭联系人姓名","第二家庭联系人工作单位","第二家庭联系人关系","第二家庭联系人联系方式","联系电话"]其余的信息都是垃圾信息。所以我们需要先将信息挑拣出来,再将信息写回电子表格即可。
其实整个程序逻辑其实很加单,但是由于数据量很大,所以在编写程序的时候要注意优化问题。尽量少进行传参。这次主要用到了docx库(处理word文档的库),xml(处理电子表格的库),re(正则表达式),和一些class的知识。由于没并没有系统的学过python所以在写脚本的过程中还是比较吃力的。并且遇到了如下问题:
import docx
from docx import Document
import sys
import os
import re
from xml.dom import minidom
from xlwt import *
#global Biao=[] #总表
#global name=[] #本表姓名
#global Domicile=[] #户籍所在地
#global nowplace=[] #现居住地
#global anotherplace=[]#异地居住地
#global partner=[] #配偶情况
#global workplace=[]#工作单位
#global firstname=[]#第一联系人姓名
#global firstwork=[]#工作单位
#global firstrelation=[]#关系
#global firstphone=[]#联系方式
#global secondname=[]#第二联系人姓名
#global secondwork=[]#工作单位
#global secondrelation=[]#关系
#global secondphon=[]#联系方式
#root = os.getcwd()
#print(root)
class people:
def __init__(self, name, Domicile,nowplace,anotherplace,partner,workplace,firstname,firstwork,firstrelation,firstphone,secondname,secondwork,secondrelation,secondphon,number,phone):
self.name=name
self.Domicile=Domicile
self.nowplace=nowplace
self.anotherplace=anotherplace
self.partner=partner
self.workplace=workplace
self.firstname=firstname
self.firstwork=firstwork
self.firstrelation=firstrelation
self.firstphone=firstphone
self.secondname=secondname
self.secondwork=secondwork
self.secondrelation=secondrelation
self.secondphon=secondphon
self.number=number
self.phone=phone
def detail(self):
print(self.number)
print(self.name)
print(self.Domicile)
print(self.nowplace)
print(self.anotherplace)
print(self.partner)
print(self.workplace)
print(self.firstname)
print(self.firstwork)
print(self.firstrelation)
print(self.firstphone)
print(self.secondname)
print(self.secondwork)
print(self.secondrelation)
print(self.secondphon)
print(self.phone)
def read1(): #word文件数据的打开
I=1
#root = os.getcwd()
#print(root)
#A=os.getcwd()
#name="11.doc"
#B=os.path.join(A, name)
#print(B)
#docName ="C:/Users/Administrator/Desktop/filemake/11.docx"
#docStr = docx.Document(docName)
#print(docStr)
#document = Document('22.docx')
#print(document)
number44=[]
phone44=[]
Biao=[] #总表
porson=[] #类表
path = '99.docx' #文件路径
document = Document(path) #读入文件
tables = document.tables
#print(table.rows[:])
pat=re.compile("编号")
#m=pat.search("ABCAADDDDDAAAA")#被校验
#print(m)
pat1=re.compile("联系电话")
doc=""
for para in document.paragraphs:
#print(para.text)
match =pat.search(para.text)
match1 =pat1.search(para.text)
#print(match)
#print(match1)
if match!=None:
end = match.end()+1
number1 = para.text[end:end+8]
#print(number1)
number44.append(number1)
if match1!=None:
end = match1.end()+1
number2 = para.text[end:end+11]
#print(number2)
phone44.append(number2)
#print(number44)
#print(phone44)
for table in tables[:]:
Biao=[]
for i, row in enumerate(table.rows[:]): # 读每行
row_content = []
for cell in row.cells[:]: # 读一行中的所有单元格
c = cell.text
row_content.append(c)
Biao+=row_content
fix(Biao,number44[I-1],phone44[I-1],I)
I=I+1
#print (row_content) #以列表形式导出每一行数据
#print(Biao)
#print(len(Biao))#176
#fix(Biao,name,Domicile,nowplace,anotherplace)
def fix(Biao,P,O,I): #word文件的处理
#print(Biao[1]) #姓名
A=Biao[1]
#print(Biao[81]) #户籍所在地
#print(Biao[82]) #D户籍所在地
B=Biao[82]
#print(Biao[89]) #现居住地
#print(Biao[90]) #D现居住地
C=Biao[90]
#print(Biao[98]) #D异地居住
D=Biao[98]
#print(Biao[130]) #配偶姓名
E=Biao[130]
#print(Biao[132]) #原工作单位
F=Biao[132]
#print(Biao[146]) #firstname
G=Biao[146]
#print(Biao[148])
H=Biao[148]
#print(Biao[154])
Q=Biao[154]
#print(Biao[156])
W=Biao[156]
#print(Biao[162]) #第二个
T=Biao[162]
#print(Biao[164])
R=Biao[164]
#print(Biao[170])
T=Biao[170]
#print(Biao[172])
Y=Biao[172]
obj1 = people(A,B,C,D,E,F,G,H,Q,W,T,R,T,Y,P,O)
#obj1.detail()
readback(obj1,I)
def readback(obj,I):#xlm数据写回
ldata = []
ldata.append(obj.number)
ldata.append(obj.name)
ldata.append(obj.Domicile)
ldata.append(obj.nowplace)
ldata.append(obj.anotherplace)
ldata.append(obj.partner)
ldata.append(obj.workplace)
ldata.append(obj.firstname)
ldata.append(obj.firstwork)
ldata.append(obj.firstrelation)
ldata.append(obj.firstphone)
ldata.append(obj.secondname)
ldata.append(obj.secondwork)
ldata.append(obj.secondrelation)
ldata.append(obj.secondphon)
ldata.append(obj.phone)
#print(ldata)
for i,p in enumerate(ldata):
#将数据写入文件,i是enumerate()函数返回的序号数
table.write(I,i,str(p))
#table.write(obj.name,obj.Domicile,obj.nowplace)
#file.save('data.xlsx')#保存
print(I)
if __name__ == '__main__':
file = Workbook(encoding = 'utf-8')
table = file.add_sheet('data')
DATA=["编号","姓名","户籍所在地","现居住地","异地居住地","配偶姓名","配偶原工作单位","第一家庭联系人姓名","第一家庭联系人工作单位","第一家庭联系人关系","第一家庭联系人联系方式","第二家庭联系人姓名","第二家庭联系人工作单位","第二家庭联系人关系","第二家庭联系人联系方式","联系电话"]
for i,p in enumerate(DATA):
#将数据写入文件,i是enumerate()函数返回的序号数
table.write(0,i,str(p))
file.save('data.xlsx')
read1()
file.save('data.xlsx')
print("done")
全部评论 (暂无评论)
info 还没有任何评论,你来说两句呐!