首页 > 编程语言 >Python八个自动化办公的技巧

Python八个自动化办公的技巧

时间:2022-12-30 10:01:36浏览次数:60  
标签:docx Python 八个 工具包 办公 file doc import data


Python八个自动化办公的技巧

大家好 我是毕加锁 (锁!)

这篇文章主要介绍了几个Python自动化办公的技巧,可以大大提高工作效率,例如:Word文档doc转docx、Excel文件批量合并、Word文件批量转pdf等,需要的可以参考一下

目录


导语

哈喽吖铁汁萌!今天这期就给大家介绍几个我用到的办公室自动化技巧,可以瞬速提高办公效率。有需要的可以往下滑了


1、Word文档doc转docx

去年想参赛一个数据比赛, 里面的数据都是doc格式, 想用python-docx 读取word文件中的数据, 但是python-docx只支持docx格式, 所以研究了这两种格式的转换。


1.1 导入工具包

​import​​​ ​​os​

​from​​​ ​​win32com ​​​​import​​​ ​​client as wc​


1.2 获取文件夹下面所有doc文件明细

​# 路径​

​path​​​​=​​​​"C:/Users/yyz/Desktop/python办公技巧/data/doc转docx/"​​​   ​​# 根据自己电脑文件修改​

 

​# 定义空list,存放文件绝对路径​

​files ​​​​=​​​ ​​[]​

​for​​​ ​​file​​​ ​​in​​​ ​​os.listdir(path):​

​if​​​ ​​file​​​​.endswith(​​​​".doc"​​​​):​

​files.append(path​​​​+​​​​file​​​​)​

​files​


1.3 转换文件 

​# 运行word程序​

​word ​​​​=​​​ ​​wc.Dispatch(​​​​"Word.Application"​​​​)​

​# for循环​

​i ​​​​=​​​ ​​0​

​for​​​ ​​file​​​ ​​in​​​ ​​files:​

​try​​​​:​

​doc ​​​​=​​​ ​​word.Documents.​​​​Open​​​​(​​​​file​​​​)    ​​​​#打开word文件​

​doc.SaveAs(​​​​"{}x"​​​​.​​​​format​​​​(​​​​file​​​​), ​​​​12​​​​)   ​​​​#另存为后缀为".docx"的文件,其中参数12指docx文件​

​doc.Close()  ​​​​#关闭原来word文件​

​print​​​​(​​​​file​​​ ​​+​​​​':转换成功'​​​​)​

​i ​​​​+​​​​=​​​​1​

​except​​​​:​

​print​​​​(​​​​file​​​ ​​+​​​​':转换[不成功]'​​​​)   ​

​files.append(​​​​file​​​​)  ​​​​# 若读取文件报错, 则将文件名称添加到files列表中重新读取​

​pass​

​print​​​​(​​​​'转换文件%i个'​​​​%​​​​i)    ​

​# 退出word    ​

​word.Quit()​


 2、文字地址批量转经纬度

工作中地址转经纬度会用在做地图可视化或者计算距离方面。


2.1 导入工具包

​# 导入工具包​

​import​​​ ​​pandas as pd​

​import​​​ ​​json​

​from​​​ ​​urllib.request ​​​​import​​​ ​​urlopen, quote​

​import​​​ ​​requests​


2.2 定义转换函数

​# 定义函数​

​def​​​ ​​getlnglat(address):​

​url ​​​​=​​​ ​​'http://api.map.baidu.com/geocoding/v3/'​

​output ​​​​=​​​ ​​'json'​

​ak ​​​​=​​​ ​​"自己申请的api"​​​   ​​# 百度地图API, 需要自己申请​

​address ​​​​=​​​ ​​quote(address) ​​​​# 由于本文地址变量为中文,为防止乱码,先用quote进行编码​

​uri ​​​​=​​​ ​​url ​​​​+​​​ ​​'?'​​​ ​​+​​​ ​​'address='​​​ ​​+​​​ ​​address  ​​​​+​​​ ​​'&output='​​​ ​​+​​​ ​​output ​​​​+​​​ ​​'&ak='​​​ ​​+​​​ ​​ak  ​​​​+​​​​'&callback=showLocation%20'​​​​+​​​​'//GET%E8%AF%B7%E6%B1%82'​

​res​​​​=​​​​requests.get(uri).text​

​temp ​​​​=​​​ ​​json.loads(res) ​​​​# 将字符串转化为json​

​lat ​​​​=​​​ ​​temp[​​​​'result'​​​​][​​​​'location'​​​​][​​​​'lat'​​​​]​

​lng ​​​​=​​​ ​​temp[​​​​'result'​​​​][​​​​'location'​​​​][​​​​'lng'​​​​]​

​return​​​ ​​lng, lat   ​​​​# 经度 longitude,纬度 latitude,​


2.3 地址转换

2.3.1 单个地址转换

​# 单个地址转换​

​getlnglat(​​​​'北京市朝阳区高碑店地区办事处高井村委会'​​​​)​

​(​​​​116.52784003604923​​​​, ​​​​39.91806508560947​​​​)​

2.3.2 批量地址转换

​# 读取数据​

​data ​​​​=​​​ ​​pd.read_excel(​​​​'C:/Users/yyz/Desktop/python办公技巧/data/地址信息.xlsx'​​​​)​

​data​

​data[​​​​'经度'​​​​] ​​​​=​​​ ​​''​

​data[​​​​'纬度'​​​​] ​​​​=​​​ ​​''​

​for​​​ ​​i ​​​​in​​​ ​​range​​​​(data.shape[​​​​0​​​​]):​

​try​​​​:​

​data.iloc[i,​​​​2​​​​] ​​​​=​​​ ​​getlnglat(data.iloc[i,​​​​1​​​​])[​​​​0​​​​] ​​​​# 经度 将第i行,第2列的地址(列索引为1)转换为经纬度,并将经度赋值给第i行,第3列(列索引为2)​

​data.iloc[i,​​​​3​​​​] ​​​​=​​​ ​​getlnglat(data.iloc[i,​​​​1​​​​])[​​​​1​​​​] ​​​​# 纬度​

​except​​​​:​

​pass​

​#print(i)​

​data​


3、经纬度计算距离

安装工具包

​pip install geopy​


3.1 导入工具包

​from​​​ ​​geopy.distance ​​​​import​​​ ​​geodesic​


3.2 读取数据

​# 读取数据​

​data ​​​​=​​​ ​​pd.read_excel(​​​​'C:/Users/yyz/Desktop/python办公技巧/data/经纬度计算距离.xlsx'​​​​)​

​data​


3.3 计算距离

​# 将经纬度赋值给变量,简化​

​wd1 ​​​​=​​​ ​​data[​​​​'纬度1'​​​​].tolist()​

​jd1 ​​​​=​​​ ​​data[​​​​'经度1'​​​​].tolist()​

​wd2 ​​​​=​​​ ​​data[​​​​'纬度2'​​​​].tolist()​

​jd2 ​​​​=​​​ ​​data[​​​​'经度2'​​​​].tolist()​

 

​lis1 ​​​​=​​​ ​​[]​

​for​​​ ​​i ​​​​in​​​ ​​range​​​​(​​​​len​​​​(data)):​

​j​​​​=​​​ ​​geodesic((wd1[i],jd1[i]), (wd2[i],jd2[i])).km   ​​​​# 纬度 经度  纬度 经度​

​lis1.append(j)​

​#print(i)​

 

​data[​​​​'距离'​​​​] ​​​​=​​​ ​​lis1​

​data​


4、百度经纬度转高德经纬度

公司有2个系统,用的坐标系不一样, 有时候需要转换一下


4.1 工具包

​# 导入工具包​

​import​​​ ​​math​

​import​​​ ​​pandas as pd​


4.2 定义函数

​# 定义转换函数​

​def​​​ ​​bdToGaoDe(lon,lat):​

​PI ​​​​=​​​ ​​3.14159265358979324​​​ ​​*​​​ ​​3000.0​​​ ​​/​​​ ​​180.0​

​x ​​​​=​​​ ​​lon ​​​​-​​​ ​​0.0065​

​y ​​​​=​​​ ​​lat ​​​​-​​​ ​​0.006​

​z ​​​​=​​​ ​​math.sqrt(x ​​​​*​​​ ​​x ​​​​+​​​ ​​y ​​​​*​​​ ​​y) ​​​​-​​​ ​​0.00002​​​ ​​*​​​ ​​math.sin(y ​​​​*​​​ ​​PI)​

​theta ​​​​=​​​ ​​math.atan2(y, x) ​​​​-​​​ ​​0.000003​​​ ​​*​​​ ​​math.cos(x ​​​​*​​​ ​​PI)​

​lon ​​​​=​​​ ​​z ​​​​*​​​ ​​math.cos(theta)​

​lat ​​​​=​​​ ​​z ​​​​*​​​ ​​math.sin(theta)​

​return​​​ ​​lon,lat​


4.3 单个转换

​# 单个转换​

​bdToGaoDe(​​​​116.512885​​​​, ​​​​39.847469​​​​)​

​(​​​​116.50647396357492​​​​, ​​​​39.84120409781157​​​​)​


4.4 批量转换

​# 读取数据​

​data ​​​​=​​​ ​​pd.read_excel(​​​​'C:/Users/yyz/Desktop/python办公技巧/data/百度经纬度转高德.xlsx'​​​​)​

​data.head()​

 

​wd ​​​​=​​​ ​​data[​​​​'纬度'​​​​].tolist()​

​jd ​​​​=​​​ ​​data[​​​​'经度'​​​​].tolist()​

​# 定义一个空列表​

​li1 ​​​​=​​​ ​​[]​

​for​​​ ​​i ​​​​in​​​ ​​range​​​​(​​​​len​​​​(data)):​

​j  ​​​​=​​​ ​​bdToGaoDe(jd[i],wd[i])​

​li1.append(j)​

 

​li1​

​data[​​​​'经度_re'​​​​] ​​​​=​​​ ​​[i[​​​​0​​​​] ​​​​for​​​ ​​i ​​​​in​​​ ​​li1]​

​data[​​​​'纬度_re'​​​​] ​​​​=​​​ ​​[i[​​​​1​​​​] ​​​​for​​​ ​​i ​​​​in​​​ ​​li1]​

​data.head()​


5、Excel文件批量合并


5.1 工具包

​# 导入工具包​

​import​​​ ​​pandas as pd​

​import​​​ ​​os​


5.2 获取文件列表

​# 设置文件路径​

​path ​​​​=​​​ ​​'C:/Users/yyz/Desktop/python办公技巧/data/数据合并/'​

​# 空列表, 用于存放文件路径​

​files ​​​​=​​​ ​​[]​

​for​​​ ​​file​​​ ​​in​​​ ​​os.listdir(path):​

​if​​​ ​​file​​​​.endswith(​​​​".xlsx"​​​​):​

​files.append(path​​​​+​​​​file​​​​)​

 

​# 查看列表​

​files​


5.3 转换存储数据

​# 定义一个空的dataframe​

​data ​​​​=​​​ ​​pd.DataFrame()  ​

 

​# 遍历所有文件​

​for​​​ ​​file​​​ ​​in​​​ ​​files:​

​datai ​​​​=​​​ ​​pd.read_excel(​​​​file​​​​)​

​datai_len ​​​​=​​​ ​​len​​​​(datai)​

​data ​​​​=​​​ ​​data.append(datai)   ​​​​# 添加到总的数据中​

​print​​​​(​​​​'读取%i行数据,合并后文件%i列, 名称:%s'​​​​%​​​​(datai_len,​​​​len​​​​(data.columns),​​​​file​​​​.split(​​​​'/'​​​​)[​​​​-​​​​1​​​​]))     ​

​# 查看是否全部读取,格式是否出错​

​# 重置索引    ​

​data.reset_index(drop​​​​=​​​​True​​​​,inplace​​​​=​​​​True​​​​)​


6、Word文件批量转pdf

只能转docx文件,转doc文件会报错, 工具包安装

​pip install docx2pdf​


6.1 导入工具包

​# 安装工具包:​

​# 导入工具包​

​from​​​ ​​docx2pdf ​​​​import​​​ ​​convert​

​import​​​ ​​os​


6.2 单个转换

​# 单个转换​

​convert(​​​​"c:/users/yyz/desktop/魔方公式.docx"​​​​, ​​​​"c:/users/yyz/desktop/excel笔记.pdf"​​​​)​


6.3 批量转换

​# 文件位置​

​path ​​​​=​​​ ​​'C:/Users/yyz/Desktop/python办公技巧/data/word转pdf/'​

​# 定义空list,存放文件列表​

​files ​​​​=​​​ ​​[]​

​for​​​ ​​file​​​ ​​in​​​ ​​os.listdir(path):​

​if​​​ ​​file​​​​.endswith(​​​​".docx"​​​​):​

​files.append(path​​​​+​​​​file​​​​)​

​files​

​for​​​ ​​file​​​ ​​in​​​ ​​files:​

​convert(​​​​file​​​​,​​​​file​​​​.split(​​​​'.'​​​​)[​​​​0​​​​]​​​​+​​​​'.pdf'​​​​)​

​print​​​​(​​​​file​​​​+​​​​'转换成功'​​​​)​


7、批量读取word中表格数据


7.1工具包安装

​pip install python​​​​-​​​​docx​

​# 读取word文件​

​doc ​​​​=​​​ ​​docx.Document(​​​​'C:/Users/yyz/Desktop/python办公技巧/data/word信息.docx'​​​​)​

​# 获取文档中所有表格对象的列表​

​biaoges ​​​​=​​​ ​​doc.tables​


7.2 不规范的表格

​cells ​​​​=​​​ ​​biaoges[​​​​1​​​​]._cells​

​cells_lis ​​​​=​​​ ​​[[cell.text ​​​​for​​​ ​​cell ​​​​in​​​ ​​cells]]​

​import​​​ ​​pandas as pd​

​import​​​ ​​numpy as np​

​datai ​​​​=​​​ ​​pd.DataFrame(cells_lis)​

​datai ​​​​=​​​ ​​datai[[​​​​1​​​​,​​​​3​​​​,​​​​7​​​​,​​​​9​​​​,​​​​14​​​​,​​​​16​​​​,​​​​19​​​​,​​​​21​​​​]]​

​datai.columns ​​​​=​​​ ​​[​​​​'姓名'​​​​,​​​​'年龄'​​​​,​​​​'籍贯'​​​​,​​​​'住址'​​​​,​​​​'工作单位'​​​​,​​​​'电话'​​​​,​​​​'是否党员'​​​​,​​​​'出生日期'​​​​]​

​datai​


7.3 规范数据

​# 获取第1个表格行丨​

​rowi ​​​​=​​​ ​​len​​​​(biaoges[​​​​0​​​​].rows)​

​rowi​

​# 定义空列表​

​lis1 ​​​​=​​​ ​​[]​

​# for循环获取第一个表的数据​

​for​​​ ​​i ​​​​in​​​ ​​range​​​​(​​​​1​​​​,rowi):  ​​​​# 从第2行开始循环​

​lis1.append([biaoges[​​​​0​​​​].cell(i,​​​​0​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​1​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​2​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​3​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​4​​​​).text])​

​# 创建一个dataframe​

​data1 ​​​​=​​​ ​​pd.DataFrame(lis1,columns​​​​=​​​​[​​​​'日期'​​​​,​​​​'品类'​​​​,​​​​'数量'​​​​,​​​​'价格'​​​​,​​​​'金额'​​​​])​

​data1​


7.4 批量读取

​import​​​ ​​pandas as pd​

​import​​​ ​​os​

​os.chdir(​​​​'C:/Users/yyz/Desktop/python办公技巧/data/word信息/'​​​​)​

​lis1​​​​=​​​​[]​

​for​​​ ​​file​​​ ​​in​​​ ​​os.listdir(​​​​'.'​​​​):​

​if​​​ ​​file​​​​.endswith(​​​​'.docx'​​​​):​

​doc ​​​​=​​​ ​​docx.Document(​​​​'./'​​​​+​​​​file​​​​)​

​biaoges ​​​​=​​​ ​​doc.tables​

​rowi ​​​​=​​​ ​​len​​​​(biaoges[​​​​0​​​​].rows)​

​for​​​ ​​i ​​​​in​​​ ​​range​​​​(​​​​1​​​​,rowi):​

​lis1.append([biaoges[​​​​0​​​​].cell(i,​​​​0​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​1​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​2​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​3​​​​).text,​

​biaoges[​​​​0​​​​].cell(i,​​​​4​​​​).text])​

​# 创建dataframe            ​

​data1 ​​​​=​​​ ​​pd.DataFrame(lis1,columns​​​​=​​​​[​​​​'日期'​​​​,​​​​'品类'​​​​,​​​​'数量'​​​​,​​​​'价格'​​​​,​​​​'金额'​​​​])​

​data1​


8 用outlook批量发邮件


8.1 导入工具包

​import​​​ ​​win32com.client as win32​

​import​​​ ​​pandas as pd​


8.2 读取数据

​# 读取数据​

​data1 ​​​​=​​​ ​​pd.read_excel(​​​​'C:/Users/yyz/Desktop/python批量发送邮件.xlsx'​​​​,sheet_name​​​​=​​​​'发送邮件'​​​​)​

​data1.fillna('',inplace​​​​=​​​​True​​​​)​


8.3 发送邮件

​# 运行outlook​

​outlook ​​​​=​​​ ​​win32.Dispatch(​​​​"outlook.Application"​​​​)   ​

​# for循环发送文件​

​for​​​ ​​i ​​​​in​​​ ​​range​​​​(data1.shape[​​​​0​​​​]):   ​

​mail ​​​​=​​​ ​​outlook.CreateItem(​​​​0​​​​)   ​​​​# 创建一个邮件对象  win32.constants.olMailItem​

​mail.To ​​​​=​​​ ​​data1.iloc[i,​​​​0​​​​]      ​​​​#收件人​

​mail.CC ​​​​=​​​ ​​data1.iloc[i,​​​​1​​​​]      ​​​​#抄送人​

​mail.Subject ​​​​=​​​ ​​data1.iloc[i,​​​​2​​​​]    ​​​​#邮件主题​

​mail.HTMLBody ​​​​=​​​ ​​data1.iloc[i,​​​​3​​​​]           ​​​​# 邮件正文 html格式​

​# mail.Body = data1.iloc[i,3]              # 邮件正文​

​mail.Attachments.Add(data1.iloc[i,​​​​4​​​​])     ​​​​# 附件​

​mail.Send() ​​​​#发送​

​i ​​​​+​​​​=​​​​1​

​print​​​​(​​​​'发送邮件%i份'​​​​%​​​​i)​

制作不易 点个免费的关注支持一下博主吧

我是毕加锁

标签:docx,Python,八个,工具包,办公,file,doc,import,data
From: https://blog.51cto.com/u_15687734/5979118

相关文章

  • Python导入模块的3种方式
    2022-12-30很多初学者经常遇到这样的问题,即自定义 Python 模板后,在其它文件中用import(或from...import)语句引入该文件时,Python解释器同时如下错误:ModuleNotFoundEr......
  • Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in po
    Python在读取文件时withopen('article.txt')asf:#打开新的文本text_new=f.read()#读取文本数据出现错误:UnicodeDecodeError:'gbk'codeccan'tdecodeby......
  • 【爬虫实战项目】Python爬虫批量下载网易云音乐飙升榜并保存本地(附源码)
    前言今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得。首先是爬取之前应该尽可能伪装成浏览器而不被识别出来......
  • 【Python】爬虫笔记-requests.exceptions.ProxyError
    0x01爬虫使用HTTP/HTTPS代理时报故:proxy='127.0.0.1:9743'proxies={'http':'http://'+proxy,'https':'https://'+proxy,}response=requests.ge......
  • python-web:flask框架下的html实例——用户注册页面
    1、submit实现页面跳转,方法为get<h1>用户注册</h1><!--使用get方式提交,method为post/get,action保存提交到哪里--><formmethod="get"action="/do/reg......
  • Python 面向对象
    目录Python面向对象方法没有重载方法的动态性私有属性和私有方法(实现封装)@property装饰器属性和方法命名总结Python面向对象方法没有重载在其他语言中,可以定义多个......
  • Python 面向对象进阶
    目录Python面向对象进阶面向对象三大特征介绍继承语法格式类成员的继承和重写查看类的继承层次结构与根类属性重写__str__()方法Python面向对象进阶面向对象三大特征......
  • [oeasy]python0035_ 整合shell编程_循环_延迟_清屏
    ​ 整合shell编程回忆上次内容用\r可以让输出位置回到行首原位刷新时间如果想要的是大字符效果需要使用figlet但同时还希望能刷新​编辑这可能......
  • Python创建虚拟环境
    Linux下安装1、virtualenv安装python的虚拟环境主要使用的是virtualenv软件。安装之前需要用到pip,首先检测是否安装:pip3list如果没有安装的话运行:sudoapt-getin......
  • 用Python解析XML的几种常见方法的介绍
    一、简介XML(eXtensibleMarkupLanguage)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用。它是web发展到一定......