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、经纬度计算距离
安装工具包
1
pip install geopy
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()