社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何用 Python 自动化在工作中摸鱼

AirPython • 5 年前 • 530 次点击  

偷懒还能干完活,才是本事。

帅张 发了一篇《工作要学会偷懒》,深感赞同。

有些事情既然定期都要处理,就没有更好的处理方式?能自动化么?
工作要学会偷懒,尤其对于一些大量重复的工作,第一感觉就要想到如何偷懒。
怎么偷懒呢?
做一点简单的编程工作就可以了。

我总结了一些在工作中非常常见的例子,将源码整理好供参考。
这类工作大部分是重复性工作,但占据了你比较多的时间,有时候用蛮力做的事情,可以有更省时省力的办法。

作为一名优秀的社会主义接班人,肯定都会有将工作任务自动化的意识,于是我去了解了一下身边不同岗位( HR、产品、运营、市场、数据分析师等 )每天需要面对的重复性劳动(肯定会有不全,各位大佬不要喷我~)

今天我来分享一下在工作是实际会遇到的情况,其实我们不用吭哧吭哧地埋头干表格,也不用拼死平活地理数据,更不用机械式地点击各个启动和确认按钮,掌握一些自动化程序会让你的工作更加高效。

那么如何将这些统统实现呢?
我将这些分为以下几类,大家可以自行评估,各取所需:


如果你喜欢的话,点个在看让更多的人看到~


系统录入自动化

 

由于你经常需要不断的将一些信息录入系统,每一次录入的过程中你可能需要不断的点击一些按钮,面对这种情况,完全可以写一个自动脚本,每次代替你来执行这些点击的行为。


这里我们需要用到 splinter:




    
pip install splinter

这里写了一个自动登录邮箱的脚本,可以实现文本输入和网页点击:

#coding=utf-8
import time
from splinter import Browser

def splinter(url):
    browser = Browser()
    #login 126 email websize
    browser.visit(url)
    #wait web element loading
    time.sleep(5)
    #fill in account and password
    browser.find_by_id('idInput').fill('xxxxxx')
    browser.find_by_id('pwdInput').fill('xxxxx')
    #click the button of login
    browser.find_by_id('loginBtn').click()
    time.sleep(8)
    #close the window of brower
    browser.quit()

if __name__ == '__main__':
    websize = 'https://mail.163.com/'
    splinter(websize)

同理可以写一个简单的游戏挂机脚本,游戏挂机脚本,无非就是自动移动鼠标,自动点击,进行重复操作,所以,第一步就是如何控制鼠标。




    
import win32api
import time
def move_click(x, y, t=0):  # 移动鼠标并点击左键
    win32api.SetCursorPos((x, y))  # 设置鼠标位置(x, y)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN |
                         win32con.MOUSEEVENTF_LEFTUP, x, y, 00)  # 点击鼠标左键
    if t == 0:
        time.sleep(random.random()*2+1)  # sleep一下
    else:
        time.sleep(t)
    return 0
# 测试
move_click(3030)

def resolution():  # 获取屏幕分辨率
    return win32api.GetSystemMetrics(0), win32api.GetSystemMetrics(1)

值得注意的是,一定要在管理员权限下的 cmd 中运行,否则点击无效。

这个时候,你已经可以写个循环,不停地点击屏幕上不同的几个点,最基础的挂机脚本就实现了。

不是在犯罪的道路上越走越远,就是在成长的道路上越走越远
更高级的游戏外挂:
https://github.com/JamesRaynor67/jump

Excel自动化处理

 

Excel 合并

在实际应用中可能会有不同月份的数据或者不同周的报告等等的 Excel 数据,都是单个独立的文件,如果想要整体使用的话就需要合并一下,那么如何利用 Python 把指定目录下的所有 Excel 数据合并成一个文件呢?


思路:利用 python xlrd 包读取 excle 文件,然后将文件内容存入一个列表中,再利用 xlsxwriter 将内容写入到一个新的 excel 文件中。

# -*- coding: utf-8 -*-

#将多个Excel文件合并成一个
import xlrd
import xlsxwriter

#获取excel中所有的sheet表
def getsheet(fh):
    return fh.sheets()

#获取sheet表的行数
def getnrows(fh,sheet):
    table=fh.sheets()[sheet]
    return table.nrows

#读取文件内容并返回行内容
def getFilect(file,shnum):
    fh=open_xls(file)
    table=fh.sheets()[shnum]
    num=table.nrows
    for row in range(num):
        rdata=table.row_values(row)
        datavalue.append(rdata)
    return datavalue


或者直接用 concat + 一个循环来实现:


for i in var_list:
    df_0 = data[['var_1','var_2','var_3','var_4',i]][data[i]=='信息']
    df_0['month'] = date_replace(i)
    df_0 = df_0[['var_1','var_2','var_3','var_4','var_5']]
    li.append(df_0)

writer = pd.ExcelWriter(r'C:\Users\mapping.xlsx')
df = pd.concat(li)
df.to_excel(writer,'Sheet1',index=False,header = None)
df

Excel 中添加数据图表
整理好 excel 文件后下一步需要做的是处理文件里的数据,根据数据来生成一些自己需要的图表:

import xlsxwriter

#设置一个例子
data = [20452618 45]

#创建表格
workbook = xlsxwriter.Workbook("temp.xlsx")
worksheet = workbook.add_worksheet("data")

#添加数据
worksheet.write_column('A1', data)

#创建图表
chart = workbook.add_chart({'type''line'})

#图表添加数据
chart.add_series({
        'values''=data!$A1:$A6',
        'name''图表名称',
        'marker': {
                'type''circle',
                'size'8,
                'border': {'color''black'},
                'fill': {'color''red'}
                } ,
        'data_labels': {'values'True},
        'trendline': {
                'type' 'polynomial',
                'order'2,
                'name''趋势线',
                'forward'0.5,
                'backward'0.5,
                'display_equation':True,
                'line': {'color''red''width':1'dash_type''long_dash'}
                }
})

worksheet.insert_chart('c1', chart)
workbook.close()

实现效果如下:


ps:这部分图文来自网络,侵删。

word关键信息提取


假设你收到 1 万份简历,你想先根据学校做一些筛选,这时候利用 python 将大量的简历进行信息汇总,只提取关键信息用 excel 查看起来更加方便。


docx 文件自己本身是压缩文件,打开压缩包之后竟然发现里面有个专门存储 word 里面文本的文件。 
那么步骤就变得简单了:
1. 打开 docx 的压缩包
2. 获取 word 里面的正文信息
3. 利用正则表达式匹配出我们想要的信息
4. 将信息存储到 txt 中( txt 可以用 excel 打开)
5. 批量调用上述过程,完成一万份简历的提取工作
利用正则匹配获取关键信息:

import re
def get_field_value(text):
    value_list = []
    m = re.findall(r"姓 名(.*?)性    别", table)
    value_list.append(m)
    m = re.findall(r"性    别(.*?)学    历", table)
    value_list.append(m)
    m = re.findall(r"民 族(.*?)健康状况", table)
    value_list.append(m)    
    '''
    此处省略其他字段匹配
    '''

    return value_list

参考资料:
https://blog.csdn.net/geoker/article/details/80149463

自动化运营监控

 

在平时的工作中,一定会有对运营情况的监控,假设你管理一家店铺,那么一些关键指标肯定是你需要每天查看到的,比如店铺访问数,商品浏览数,下单数等等,这个时候不用每天重复地去统计这些数据,这需要写一个自动化程序,每天将数据保存在固定的文件夹下就可以实现报表的实时监控。


如果你的数据来源是线下文件:
那么可以利用 python 操作线下文件将其载入数据库
然后通过数据库对数据进行处理
再利用 python 输出结果




    
from impala.dbapi import connect
from impala.util import as_pandas
import datetime

conn = connect(host='host',port=21050,auth_mechanism='PLAIN',user='user',password='password')
#host:数据库域名
#user:数据库用户名
#password:数据库密码
df_data = pd.read_excel('temp.xlsx')

rows =[]
for index, row in df_data.iterrows():
    rows.append('('+'"'+str(row['case_id']).replace('nan','null')+'"'+','+'"'+str(row['birth_date'])+'"'+')'+',')
    a= '''
    INSERT into table
    (case_id, birth_date)
    values '''

for i in rows:
    a += i
a = a[:-1]

cursor1 = conn.cursor()
cursor1.execute(a)
cursor1.close()
conn.close()
print('成功导入数据至数据库...')
del a
del rows 


如果你的数据来源是线上文件(存在数据库)

那可以直接利用 python 链接数据库进行一些列的操作
然后导出你所需要的结果

import sql   #sql是封装的sql文件
sql_end = sql.sql_end
cursor1 = conn.cursor()
for i in sql_end.split(';'):
    print(i)
    cursor1.execute(i)
cursor1.close()
conn.close()
print('程序运行结束,请执行下一步。')


python连接数据库:

https://blog.csdn.net/weixin_42213622/article/details/86523400


自动发送邮件


使用 Python 实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间。
数据分析师经常会遇到一些取数需求,有些数据需求是每天都需要的,有些数据需求是每周一次的。对于这些周期性的数据需求,每次都重复性地手动导出这些数据,并回传给需求方,是很繁琐且浪费时间的。所以完全可以设置自动邮件来解决。
"Talk is cheap, show you the code"
常见的邮件肯定有三部分:
1、正文
2、图片
3、附件
OK
导入我们需要用到的包

from email.mime.text import


    
 MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib

msg = MIMEMultipart()


在邮件中插入正文:


##在邮件中插入文本信息    
df_text='''
                  
                  

   Hi all ,


                  

   这是一个测试邮件,详情请参考附件 


                  

   情况如下图: 


                 '''

msgtext = MIMEText(df_text, 'html''utf-8')
msg.attach(msgtext)


如果你需要插入图片,利用同样的方法,在邮件中插入图片:


##在邮件中插入图片信息
image = open('temp.jpg','rb')
msgimage = MIMEImage(image.read())
msg.attach(msgimage)


在邮件中插入附件:


##在邮件添加附件
msgfile = MIMEText(open('temp.xlsx''rb').read(), 'base64''utf-8')
msgfile["Content-Disposition"] = 'attachment; filename="temp.xlsx"'
msg.attach(msgfile)


剩下的就是设置一些邮件参数来发送邮件


#设置邮件信息常量
email_host= ''  # 服务器地址
sender = '' # 发件人
password ='' # 密码,如果是授权码就填授权码
receiver = '' # 收件人

发送邮件:

try:
    smtp = smtplib.SMTP(host=email_host)
    smtp.connect(email_host)
    smtp.starttls()
    smtp.login(sender, password)
    smtp.sendmail(sender, receiver.split(',') , msg.as_string())
    smtp.quit()
    print('发送成功')
except Exception: 
     print('发送失败')


然后将你的任务设置定时执行就可以轻松实现啦!


实现效果:


平时的工作中,真的有太多可以去自动化的任务,由于经验受限这里不能一一举例说明,只能尽量分享一些我遇到过或者听说过的例子。
希望大家都越来越高效,边偷懒边完成工作~

大家如果有特别想要了解或者实现的功能,在文末留言或者私信,我可以针对一个点写得更详细,将完整实现方式分享给大家。


源码下载


1. 关注  “AirPython” 公众号

2. 公众号后台回复关键词:偷懒




THANDKS
- End -
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50501
 
530 次点击