Python自动化办公:数据分析、发送邮件、文件管理、python对微信及钉钉相关处理

2022-07-26,,,,

文章目录

  • 一.数据分析(pandas)
    • 1.导入数据
    • 2.数据透视表
    • 3.matplotlib
    • 4.数据可视化
  • 二.发送邮件
    • 1.发送普通邮件
    • 2.发送带网址的邮件
  • 三.Python玩微信
    • 1.可视化统计好友地理位置
    • 2.获取全部微信好友头像
    • 3.开发聊天机器人
  • 四.Python玩钉钉
    • 1.自动群发钉钉消息
    • 2.发链接和Markdown
  • 五.文件管理
    • 1.搜索文件
    • 2.一键打开办公软件

一.数据分析(pandas)

1.导入数据

安装:pip install pandas
(1)一维数据

import pandas as pd

# 一维数据
one_d = pd.Series(['a', 'b', 'c', 'd'])
print(one_d)

运行结果:

(2)二维数据

import pandas as pd
two_d = pd.DataFrame({
    '学号': ['A2', 'A3'],
    '姓名': ['源一', '源二'],
    '语文': ['96', '77'],
})
print(two_d)

运行结果:

2.数据透视表

安装:pip install numpy

import pandas as pd
import numpy as np

r_file = pd.ExcelFile('test.xlsx')
data = r_file.parse('Sheet1')
# index代表行的名称,columns代表列的名称
# aggfunc=np.sum 求和
# margins =True 总计
# 求各省的分数和
pt_s = pd.pivot_table(data, index=['省份'], aggfunc=np.sum, margins=True)  # aggfunc=np.sum 求和,默认是平均值
print(pt_s)
# 全部显示行和列
# pt_s.set_option('display.max_rows', None)
# pt_s.set_option('display.max_columns', None)
# 求各省的个数
pt_n = pd.pivot_table(data, index=['省份'], aggfunc=np.size, margins=True)
print(pt_n)

print('++++++++++')
# 从数据透视表中取数字
print(pt_s.iat[0, 0])
print(pt_n.iat[0, 0])

运行结果:

3.matplotlib

安装:pip install matplotlib
(1)折线图

import matplotlib.pyplot as mplt

# 支持中文
mplt.rcParams['font.sans-serif'] = ['SimHei']
date = ['2020/12/3', '2020/12/4', '2020/12/5']
BJ = [10, 30, 20]
SH = [40, 60, 50]

# 折线图
mplt.plot(date, BJ, color='red', label='北京')
mplt.plot(date, SH, color='blue', label='上海')
mplt.title('降雨量')
mplt.xlabel('日期')
mplt.ylabel('降雨量')
mplt.legend()
mplt.show()

运行结果:

(2)柱状图

# 柱状图
mplt.bar(date, BJ, color='red', label='北京')
mplt.legend()
mplt.show()

运行结果:

# 水平柱状图
mplt.barh(date, BJ, color='red', label='北京')
mplt.legend()
mplt.show()

运行结果:

(3)饼图

# 饼图
data = [1, 2]
province = ['北京', '上海']
colors = ['red', 'blue']
mplt.pie(x=data, labels=province, colors=colors)
mplt.legend()
mplt.show()

运行结果:

4.数据可视化

import pandas as pd
import numpy as np
import matplotlib.pyplot as mplt

r_file = pd.ExcelFile('test.xlsx')
data = r_file.parse('Sheet1')
# 各省的个数
pt_n = pd.pivot_table(data, index=['省份'], aggfunc=np.size)

mplt.rcParams['font.sans-serif'] = ['SimHei']
pt_n.plot(kind='bar')

# 修改
# index的倾斜角度
mplt.xticks(rotation=45)
mplt.title('各省数量')
mplt.xlabel('省份')
mplt.ylabel('个数')
mplt.legend()

mplt.show()

运行结果:

二.发送邮件

1.发送普通邮件

import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

host_server = 'smtp.qq.com'  # QQ邮箱smtp服务器
sender = 'xxxxxx@qq.com'  # 发件人邮箱
pwd = 'xxxxxxx'  # QQ邮箱授权码

receiver = 'xxxxxxxxxx@qq.com'  # 收件人邮箱

mail_title = 'Python办公自动化的邮件'  # 邮件标题
mail_content = '你好,这是测试邮件'  # 邮件正文

msg = MIMEMultipart()  # 初始化邮件主体
msg['Subject'] = Header(mail_title, 'utf-8')
msg['From'] = sender
msg['To'] = Header('测试邮箱', 'utf-8')
msg.attach(MIMEText(mail_content, 'plain', 'utf-8'))  # 邮件正文内容,plain:无格式

smtp = SMTP_SSL(host_server)  # ssl登录
smtp.login(sender, pwd)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

运行结果:

2.发送带网址的邮件

import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

host_server = 'smtp.qq.com'  # QQ邮箱smtp服务器
sender = 'xxxxxx@qq.com'  # 发件人邮箱
pwd = 'xxxxxxx'  # QQ邮箱授权码

receiver = 'xxxxxxxxxx@qq.com'  # 收件人邮箱

mail_title = 'Python办公自动化的邮件'  # 邮件标题
mail_content = '你好,这是测试邮件,请点击链接:https://blog.csdn.net/yuanfate'  # 邮件正文

msg = MIMEMultipart()  # 初始化邮件主体
msg['Subject'] = Header(mail_title, 'utf-8')
msg['From'] = sender
msg['To'] = Header('测试邮箱', 'utf-8')
msg.attach(MIMEText(mail_content, 'html', 'utf-8'))  # 邮件正文内容
try:
    smtp = SMTP_SSL(host_server)  # ssl登录
    smtp.set_debuglevel(0)  # 调试,0:关闭,1:打开
    smtp.ehlo(host_server)
    smtp.login(sender, pwd)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()
    print('邮件发送成功')
except smtplib.SMTPException:
    print('无法发送邮件')

三.Python玩微信

1.可视化统计好友地理位置

安装:pip install wxpy

from wxpy import *

'''
微信机器人登录有3种模式,
(1)极简模式:robot = Bot()
(2)终端模式:robot = Bot(console_qr=True)
(3)缓存模式(可保持登录状态):robot = Bot(cache_path=True)
'''

# 初始化一个机器人对象
# cache_path缓存路径,给定值为第一次登录生成的缓存文件路径
bot = Bot()
# 获取好友列表(包括自己)
my_friends = bot.friends(update=False)
'''
stats_text函数:帮助我们简单统计微信好友基本信息
简单的统计结果的文本
:param total:总体数量
:param sex:性别分布
:param top_provinces:省份分布
:param top_cities:城市分布
:return:统计结果文本
'''
print(my_friends.stats_text())

说明:如果扫码登录后提示:KeyError: ‘pass_ticket’,则说明微信禁止该账号登陆微信网页版,需要找到能让账号登陆微信网页版的方法就可以了。

2.获取全部微信好友头像

from wxpy import *
import os

# 初始化机器人,扫码登录微信,适用于windows系统
bot = Bot()
#  Linux系统,执行登录请调用下面的这句
bot = Bot(console_qr=2, cache_path='botoo.pkl')
# 获取当前路径信息
image_dir = os.getcwd() + '\\' + 'FriendImgs\\'
# 如果保存头像的FriendImgs目录不存在就创建一个
if not os.path.exists(image_dir):
    os.mkdir(image_dir)
os.popen('explorer' + image_dir)
my_friends = bot.friends(update=True)
# 获取好友头像信息并存储在FriendImgs目录中
n = 0
for friend in my_friends:
    print(friend)
    image_name = image_dir + str(n) + '.jpg'
    friend.get_avatar(image_name)
    n = n + 1

3.开发聊天机器人

我们先去 图灵机器人官网 注册账号。
创建机器人,进行机器人名称、应用领域、终端进行设置即可

获得机器人API

from wxpy import *

# 扫码登陆
bot = Bot()

# 初始化图灵机器人
tuling = Tuling(api_key='***************************')

# 自动回复所有文字消息
@bot.register(msg_types=TEXT)
def auto_reply_all(msg):
    tuling.do_reply(msg)

# 开始运行
bot.join()

四.Python玩钉钉

1.自动群发钉钉消息

在钉钉内创建自定义机器人

设置到最后,复制Webhook:

添加成功:

然后在pycharm中进行操作:
安装:pip install dingtalkchatbot

from dingtalkchatbot.chatbot import DingtalkChatbot

webhook = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx' #Webhook地址

ddrobot = DingtalkChatbot(webhook)

ddrobot.send_text(msg='钉钉机器人测试', is_at_all=True)  # is_at_all=True:表示@所有人
# at_mobiles=['111xxxxxxxx'] #需要@人的手机号
# ddrobot.send_text(msg='钉钉机器人测试',is_at_all=False,at_mobiles=at_mobiles)

运行结果:

2.发链接和Markdown

(1)发送链接

import time
import hmac
import hashlib
import base64
import urllib.parse

# 安全设置为加签方式时:
# 第一步:把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
timestamp = str(round(time.time() * 1000))
secret = 'xxxxxx'  # 设置加签时产生的密钥
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

from dingtalkchatbot.chatbot import DingtalkChatbot

# 第二步:把 timestamp和第一步得到的签名值拼接到URL中。
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx&timestamp={}&sign={}'.format(timestamp, sign)

ddrobot = DingtalkChatbot(webhook)

ddrobot.send_link(title='博客', text='YFater的博客', message_url='https://blog.csdn.net/yuanfate',pic_url='https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=297750003,2704801218&fm=26&gp=0.jpg')

运行结果:

(2)发送Markdown

import time
import hmac
import hashlib
import base64
import urllib.parse

# 安全设置为加签方式时:
# 第一步:把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
timestamp = str(round(time.time() * 1000))
secret = 'xxxxxx'  # 设置加签时产生的密钥
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

from dingtalkchatbot.chatbot import DingtalkChatbot

# 第二步:把 timestamp和第一步得到的签名值拼接到URL中。
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx&timestamp={}&sign={}'.format(timestamp, sign)

ddrobot = DingtalkChatbot(webhook)

ddrobot.send_markdown(title='博客', text='''# YFater的博客\n
>天知道你会遇见什么\n
>![图片](https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=297750003,2704801218&fm=26&gp=0.jpg)\n''')

运行结果:

五.文件管理

1.搜索文件

# 搜索文件的程序
import os

list_all = []
# win/mac/linux
for root, dirs, files in os.walk('E:/Python37'):
    for name in files:
        file_path = os.path.join(root, name)
        if 'python' in name:
            print(os.path.split(file_path))

运行结果:

扩展:搜索文件我们会使用Everything软件,快捷方便

2.一键打开办公软件

import os

# 打开谷歌
chrome = r'C:\Users\YFater\AppData\Local\Google\Chrome\Application\chrome.exe'
os.popen(chrome)

# 打开网易云音乐
cloudmusic=r'E:\网易云\CloudMusic\cloudmusic.exe'
os.popen(cloudmusic)

#打开任务管理器
taskmgr = 'taskmgr'
os.popen(taskmgr)

本文地址:https://blog.csdn.net/yuanfate/article/details/110479911

《Python自动化办公:数据分析、发送邮件、文件管理、python对微信及钉钉相关处理.doc》

下载本文的Word格式文档,以方便收藏与打印。