Python八个自动化办公的技巧
大家好 我是毕加锁 (锁!)
这篇文章主要介绍了几个Python自动化办公的技巧,可以大大提高工作效率,例如:Word文档doc转docx、Excel文件批量合并、Word文件批量转pdf等,需要的可以参考一下
目录
- 导语
- 1、Word文档doc转docx
- 1.1 导入工具包
- 1.2 获取文件夹下面所有doc文件明细
- 1.3 转换文件
- 2、文字地址批量转经纬度
- 2.1 导入工具包
- 2.2 定义转换函数
- 2.3 地址转换
- 3、经纬度计算距离
- 3.1 导入工具包
- 3.2 读取数据
- 3.3 计算距离
- 4、百度经纬度转高德经纬度
- 4.1 工具包
- 4.2 定义函数
- 4.3 单个转换
- 4.4 批量转换
- 5、Excel文件批量合并
- 5.1 工具包
- 5.2 获取文件列表
- 5.3 转换存储数据
- 6、Word文件批量转pdf
- 6.1 导入工具包
- 6.2 单个转换
- 6.3 批量转换
- 7、批量读取word中表格数据
- 7.1工具包安装
- 7.2 不规范的表格
- 7.3 规范数据
- 7.4 批量读取
- 8 用outlook批量发邮件
- 8.1 导入工具包
- 8.2 读取数据
- 8.3 发送邮件
导语
哈喽吖铁汁萌!今天这期就给大家介绍几个我用到的办公室自动化技巧,可以瞬速提高办公效率。有需要的可以往下滑了
1、Word文档doc转docx
去年想参赛一个数据比赛, 里面的数据都是doc格式, 想用python-docx 读取word文件中的数据, 但是python-docx只支持docx格式, 所以研究了这两种格式的转换。
1.1 导入工具包
1
2
|
import os
from win32com import client as wc
|
1.2 获取文件夹下面所有doc文件明细
1
2
3
4
5
6
7
8
9
|
# 路径
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 转换文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 运行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 导入工具包
1
2
3
4
5
|
# 导入工具包
import pandas as pd
import json
from urllib.request import urlopen, quote
import requests
|
2.2 定义转换函数
1
2
3
4
5
6
7
8
9
10
11
12
|
# 定义函数
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 单个地址转换
1
2
3
|
# 单个地址转换
getlnglat( '北京市朝阳区高碑店地区办事处高井村委会' )
( 116.52784003604923 , 39.91806508560947 )
|
2.3.2 批量地址转换
1
2
3
|
# 读取数据
data = pd.read_excel( 'C:/Users/yyz/Desktop/python办公技巧/data/地址信息.xlsx' )
data
|
1
2
3
4
5
6
7
8
9
10
|
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、经纬度计算距离
安装工具包
3.1 导入工具包
1
|
from geopy.distance import geodesic
|
3.2 读取数据
1
2
3
|
# 读取数据
data = pd.read_excel( 'C:/Users/yyz/Desktop/python办公技巧/data/经纬度计算距离.xlsx' )
data
|
3.3 计算距离
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 将经纬度赋值给变量,简化
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 工具包
1
2
3
|
# 导入工具包
import math
import pandas as pd
|
4.2 定义函数
1
2
3
4
5
6
7
8
9
10
|
# 定义转换函数
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 单个转换
1
2
3
|
# 单个转换
bdToGaoDe( 116.512885 , 39.847469 )
( 116.50647396357492 , 39.84120409781157 )
|
4.4 批量转换
1
2
3
|
# 读取数据
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 工具包
1
2
3
|
# 导入工具包
import pandas as pd
import os
|
5.2 获取文件列表
1
2
3
4
5
6
7
8
9
10
|
# 设置文件路径
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 转换存储数据
1
2
3
4
5
6
7
8
9
10
11
12
|
# 定义一个空的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文件会报错, 工具包安装
6.1 导入工具包
1
2
3
4
|
# 安装工具包:
# 导入工具包
from docx2pdf import convert
import os
|
6.2 单个转换
1
2
|
# 单个转换
convert( "c:/users/yyz/desktop/魔方公式.docx" , "c:/users/yyz/desktop/excel笔记.pdf" )
|
6.3 批量转换
1
2
3
4
5
6
7
8
9
10
11
|
# 文件位置
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工具包安装
1
|
pip install python - docx
|
1
2
3
4
|
# 读取word文件
doc = docx.Document( 'C:/Users/yyz/Desktop/python办公技巧/data/word信息.docx' )
# 获取文档中所有表格对象的列表
biaoges = doc.tables
|
7.2 不规范的表格
1
2
|
cells = biaoges[ 1 ]._cells
cells_lis = [[cell.text for cell in cells]]
|
1
2
3
4
5
6
|
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
2
3
|
# 获取第1个表格行丨
rowi = len (biaoges[ 0 ].rows)
rowi
|
1
2
3
4
5
6
7
8
9
|
# 定义空列表
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])
|
1
2
3
|
# 创建一个dataframe
data1 = pd.DataFrame(lis1,columns = [ '日期' , '品类' , '数量' , '价格' , '金额' ])
data1
|
7.4 批量读取
1
2
3
|
import pandas as pd
import os
os.chdir( 'C:/Users/yyz/Desktop/python办公技巧/data/word信息/' )
|
1
2
3
4
5
6
7
8
9
10
11
12
|
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])
|
1
2
3
|
# 创建dataframe
data1 = pd.DataFrame(lis1,columns = [ '日期' , '品类' , '数量' , '价格' , '金额' ])
data1
|
8 用outlook批量发邮件
8.1 导入工具包
1
2
|
import win32com.client as win32
import pandas as pd
|
8.2 读取数据
1
2
3
|
# 读取数据
data1 = pd.read_excel( 'C:/Users/yyz/Desktop/python批量发送邮件.xlsx' ,sheet_name = '发送邮件' )
data1.fillna('',inplace = True )
|
8.3 发送邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 运行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)
|
制作不易 点个免费的关注支持一下博主吧
我是毕加锁 期待你的关注
Python八个自动化办公的技巧相关推荐
- python常用库 自动化办公类 —— PyPDF2(处理pdf文件)
python常用库 自动化办公类 -- PyPDF2(处理pdf文件) 摘要 PyPDF库的安装 PyPDF库的常用功能 文字提取 合并pdf文件 旋转pdf页面 pdf文件加密 摘要 本文主要介绍了 ...
- Python程序设计与科学计算精录总结Episode.4 Python进阶:自动化办公应用(基于Michael导师Python课程与VS2019)
听说, 星空从不耀白. 所以, 凡是夜, 我都低头疾走. 宁静的夏, 望着猎户天际划破, 你许下丝缕的心愿, 愿与我恒久. 可是, 哪里有长守,只不过是慰藉呓语几片. 你悄悄地离开, 捎去美丽的心愿, ...
- 如何用Python操作Excel自动化办公?一个案例教会你openpyxl——读取数据
欢迎大家关注我,我是拾陆,关注同名"二八Data" 数据分析工作最难搞的是处理数据的过程,不然不会有专门的ETL(数据抽取.转换.加载)工程师了.如果是企业级数据处理可能数据库直接 ...
- Python实现Office自动化办公(实现Python对word基本操作、对excel基本操作、在word中插入表格、word中插入网站爬虫取图)
Python实现Office办公自动化,以商务流程为例 一. Pycharm 2018(Mac版)的下载 二.Welcome to PyCharm 三.使用DocxTemplate功能模块,实现pyt ...
- python办公自动化案例-Python实战:自动化办公:Python 自动整理 Excel 表格
相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作.最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格 ...
- 如何用Python操作Excel自动化办公?一个案例教会你openpyxl——公式计算和数据处理
术业有专攻,每一种工具每一种岗位都会有资深玩家,别说因为人人都会Excel就瞧不起Excel玩的溜的朋友.对于运营场景来说,能够和具体业务结合紧密,轻松实现目的,这就是很强大的玩家,但是如果精于提高技 ...
- 【PDF】超简单!用Python让Excel自动化办公
Excel作为当今最流行的办公软件之一,在数据编辑.处理和分析方面的表现都非常出色.但是,即使有 Excel的帮助,在面对重复性.机械性的事务时仍然要花费大量时间. 所以今天了解一下这本<超简单 ...
- io python 读取pdf_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- 自动化办公python脚本_Python自动化办公
在公司购买的OA系统上,很多功能都是软件商开发好的,如果有什么自定义的需求,也很难实现.现实情况下需要将一个工单的各类信息汇总整理为一份Excel,看似简单的需求,却需要在OA系统上反复点击多次,人工 ...
最新文章
- ganglia访问时出现“You don‘t have permission to access /ganglia/ on this server“
- solidworks经典实例网盘下载_Solidworks自学视频教程(附源文件)讲解详细到位,成就设计高手...
- su user oracle does not exist,Linux下oracle用户无法su切换的异常【终极解决方案_生产环境亲测有效】...
- OpenCV相位校正phase corr的实例(附完整代码)
- 【Java】Java运行cmd命令直接导出.sql文件
- $PATH环境变量的作用
- 数据库“裸奔”再引祸端:VOIPO数百万呼叫和短信日志流出
- 【Flink】The Kryo Output still contains data from a previous serialize call. It has to be flushed or
- 2022年6月深圳地区数据分析师认证(CPDA),进入了解
- iText5实现Java生成PDF文件完整版
- 西南石油大学本科毕业论文答辩PPT模板
- MySQL - redolog 图文详解
- kubernetes部署失败的原因
- INT201 决策,计算,语言 笔记
- 【云云怪】深度学习之:股票价格预测
- RedHat 系软件包管理
- 《C++ Templates》笔记 Chapter 12 Fundamentals in Depth-Chapter 13 Names in Templates
- RIO——健壮的IO包
- 力扣算法学习计划打卡:第五天
- 软件项目管理——谈谈软件定价
热门文章
- [SCUCTF2022]校赛Web出题笔记
- 为什么程序员喜欢这些键盘?
- windows 下 搭建 ElasticSearch 环境
- 我的2018:微信朋友圈的24个瞬间
- 如何实现开发一个企业认证开发版微信服务号的详细步骤
- Android AlertDialog 对话框开启和关闭输入法问题
- requirejs的用法
- 初识html及工具的使用
- pycharm中couldn‘t upload helpers for remote
- 【zookeeper】Apache curator优点介绍