python
运维饺子
干一行,专一行
展开
-
给用户开发上报数据状态邮件
功能:1.发送上报状态,如果失败,发送未上报城市名称2.通过check.sh来调用和判断程序是否启动,未启动则启动程序。3.发送之后sleep函数推迟到第二天再次检测,每隔5分钟检测是否发布# -*- coding: UTF-8 -*-import osimport smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrfrom email.header import Headerfr.原创 2022-02-16 17:23:09 · 1502 阅读 · 0 评论 -
邮件发图片附件
免费的邮箱smtp发送附件文件是有大小限制的,一般都是只能发送几十M,如果再大就要花钱开通大文件传送了。# -*- coding: UTF-8 -*-import osimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.utils import formataddrfrom time import sleep# from emai原创 2022-02-15 08:26:17 · 323 阅读 · 0 评论 -
项目gfs数据下载
因为项目上从公司下载数据的程序,我的老是会出现异常,重复下载或者下载进程堆积的情况。然后下载程序又有点老,pyhon和shell结合的方式,用的是python2写的,我看着非常繁琐。程序还是自己写的香,维护起来方便,耗时一下午,测试没啥问题。1.可自动接续下载2.下载完成后写入日志,完成后不会再下载3.写入和读取status状态文件,监控文件下载进程,完成后归0,方便第二天下载。4.可更改status文件自定义从第几个开始下载5.文件一致性检验,如果和公司数据md5值不一致,会重新下载。6.自原创 2022-02-12 22:19:53 · 1389 阅读 · 1 评论 -
类的依赖和组合
面对对象开发中,用类作为模板,生成多个实例化对象,每个对象之间都拥有独立的内存空间,封装类模板的属性和方法将其放入到对象空间中。对象其实就是一个内存地址,通过这个内存地址可以找到和调用其所有的属性和方法。这个内存地址是一个静态常量,所以可以被赋予变量,也可以当作参数传入函数中。依赖和组合也是依托这种原理。类和对象也在不同的内存空间中,所以对象的操作改变不了类中的任何属性和方法,只能够调用。依赖:一个对象被当作参数传入另一个对象的方法中,被另一个对象使用其属性或方法。就是需要被传入对象的帮助来完成自己的功原创 2022-01-14 16:47:21 · 330 阅读 · 0 评论 -
python datetime模块
datetime模块有5个类,常用的有四个:time,date,datetime,timedelta。从需求或者结合使用场景来记录下常用用法。场景一:从文件名中获取到一个时间字符串,某年某月某日某时,把这个时间字符串转换为datetime对象:s = '2022011222' #年月日时date = datetime.datetime.strptime(s,'%Y%m%d%H')print(date,type(date))#输出结果:2022-01-12 22:00:00 <class原创 2022-01-12 22:43:21 · 296 阅读 · 0 评论 -
python hashlib模块加密
hashlib模块就是python集合了各种加密算法的一个模块,比如md5加密,sha算法等。当然主要的作用就是给数据加密或者计算文件的md5值等。1.给一个字符串经过md5加密后输出到屏幕上:import hashlibf = hashlib.md5('222'.encode('utf-8'))f.update('123456'.encode('utf-8')) #字节数据加密print(f.hexdigest()) #输出一个十六进制md5值#输出结果是等长度的732f2bc0原创 2022-01-12 12:47:29 · 636 阅读 · 0 评论 -
json序列化
json模块作用json模块可以将字典、列表等序列化对象转换成特殊的字符串,也就是json数据,再将这种特殊的字符串转换回来。主要的使用场景比如网络传输,文件存储数据。如果用str()方法转换成普通的字符串,没有办法再转换回原来的数据类型。eval方法除外,不推荐使用。json数据还是各种编程语言通用的数据类型,python的json数据,java也可以获取使用,十分方便。json方法:json主要的方法比较简单,有四个,两两一对使用。json.dump()、json.load():只能用于文件数原创 2022-01-11 12:57:10 · 5356 阅读 · 0 评论 -
python装饰器之装饰器函数本身如何传参
装饰器涉及到被装饰函数和装饰函数它自己,被装饰器函数可以参数,那么怎么给装饰器它自己传参数呢。比如游戏中有打和闪现的功能,这时有个装饰器,能给他们都增加一个击退的效果。给装饰器本身的传参作用,在这里就比如,击退的距离,比如打的时候击退两米,闪现的时候击退三米。那么这个参入的参数就可以是这个击退距离。如果不传参的话就需要写两个击退装饰器了。写两个例子演示一下。演示一:下面代码演示下说明:def wrap(x): def inner(*args,**kwargs): result原创 2022-01-08 20:21:35 · 2124 阅读 · 0 评论 -
python装饰器
闭包装饰器的基础就是闭包。闭包首先是嵌套函数,并且内层函数对外层函数变量非全局变量有引用。def wrap(x): def inner(): print('start') print(x) print('end') return inner_inner = wrap(2)_inner()_inner得到了内层函数的内存地址,形参x就是外层函数的变量。闭包的一个特性就是外层函数结束了,内存函数依然可以被调用。装饰器装饰器从字面原创 2022-01-08 12:40:08 · 634 阅读 · 0 评论 -
python min函数的key用法
min传入key后可以更加全面以及符合自己需求的得到结果。举几个例子说明:例如1:将下面的列表按年龄数字排序返回元组list = [('lg',24),('wx',23),('aa',34)]首先min传入key的格式为:min(list,key=func)第一个参数是需要比较的数据,key后面只能传入函数名书写func函数里面的内容,func函数内容是自定义的:def func(x): #x是min传入的参数,这里是单个元组如('lg',24) return x[1]原创 2022-01-05 15:54:28 · 4929 阅读 · 0 评论 -
python基础知识回顾一
1.字符串的大小写:适用于用户输入的时候#1 字符串的大小写处理name = 'li gen'print(name.title()) #单词首字母大写print('--------')print(name.upper()) #全大写print(name.lower()) #全小写输出:Li Gen--------LI GENli gen2.字符串的拼接#字符串的合并name = 'ligen'age = '24'msg = name + ' is ' +原创 2022-01-03 12:28:14 · 538 阅读 · 0 评论 -
前后端python简单模拟api接口返回json,以及采集数据
1.先编写一个socket服务端模拟web前端,并发布json数据:import socketserver=socket.socket()ip_port=('127.0.0.1',8005)server.bind(ip_port)server.listen()while 1: conn,addr = server.accept() while 1: try: from_client_msg = conn.recv(1024).deco原创 2022-01-02 11:25:55 · 3164 阅读 · 0 评论 -
多线程socket通信
服务端:from threading import Threadimport socketdef communicate(conn,addr): while 1: try: from_client_msg = conn.recv(1024) print(f"来自客户端{addr[1]}的消息:{from_client_msg.decode('utf-8')}") to_client_msg = input原创 2021-12-31 13:22:04 · 345 阅读 · 0 评论 -
进程基于队列通信,生产者消费者模型
from multiprocessing import Queuefrom multiprocessing import Processimport osdef produce(name,q): for i in range(10): pid = os.getpid() msg = f'这是{name}做的{i}个包子' q.put(msg)def cursumer(name,q): try: for i in r原创 2021-12-29 16:00:17 · 222 阅读 · 0 评论 -
进程间基于文件系统通信
简单抢票模拟:开启多个进程对一个文件进行读写,错误版:import jsonimport osfrom multiprocessing import Processimport timeimport randomdef select(): time.sleep(random.randint(0, 2)) with open('w.txt',encoding='utf8') as f1: dic = json.load(f1) print(f"当原创 2021-12-29 14:26:45 · 298 阅读 · 0 评论 -
进程互斥锁
互斥锁的作用就是让多个子进程争抢一个资源的同时,有序进行而不会同时被系统资源调用执行。就好比多个人去打印店打印东西,一台打印机只能一个人一个人打,这样打印出来的东西就会是他的。当然串行的方式也能解决这个问题,但是谁先谁后,你没办法确定,你能决定程序执行的先后,却没办法决定系统资源调用的先后。互斥锁就是让多个进程争抢一把锁,有锁的先,等它完成后,再次争抢。from multiprocessing import Processfrom multiprocessing import Lockimport t原创 2021-12-28 16:17:12 · 1078 阅读 · 0 评论 -
多进程的引用
from multiprocessing import Processimport timedef task(*args): #多参数的调用 print(f"{args[0]} is running") time.sleep(3) print(f"{args[1]} is gone")def task2(*args): print(f"{args[0]} is running") time.sleep(3) print(f"{args[1]} is原创 2021-12-26 14:28:24 · 172 阅读 · 0 评论 -
pymysql操作以及简单sql注入模拟
pymysql是python连接mysql操作的一个模块,pymysql操作:import pymysqlconn = pymysql.connect( host='192.168.247.100', port=3306, user='root', password='123457', database='test', charset='utf8')# cursor = conn.cursor(pymysql.cursors.DictCursor)原创 2021-12-17 20:20:06 · 722 阅读 · 0 评论 -
python连接pgsql数据库操作
import psycopg2#连接数据库conn = psycopg2.connect(database='test',user='postg', password='y0',host='10.13.108.5',port='5432')cursor = conn.cursor() #创建一个游标#execuet方法是针对数据库的请求cursor.execute('create table test_1(id int,name varchar(20) )原创 2021-06-10 10:13:24 · 2028 阅读 · 0 评论 -
python记录日志logging
版本一:只能输出屏幕和文件二选一import logging#配置日志级别logging.basicConfig( # level=logging.DEBUG, level=30, #配置输出格式 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #配置输出到的文件 filename=r'test.log')#五个级别logging.deb原创 2021-05-28 13:45:25 · 175 阅读 · 1 评论 -
python分文件规范化开发
单个文件:user_txt = r'C:\Users\lg\Desktop\study\Python\python对象\user.txt'status_dic = { "username":None, "status":False}flag = Truedef login(): i = 0 with open(user_txt,'r',encoding='utf-8') as f0: dic = {i.strip().split('|')[0]:原创 2021-05-26 09:51:47 · 242 阅读 · 1 评论 -
python序列化
一.为什么要序列化?序列就是一种数据格式或者类型的统称,序列化就是要将某种数据格式转化成序列。python有元组、字典、列表等数据类型,这些数据类型都有具体属性可以方便进行文本处理或者取值。但是在开发之中,数据要进行传输,这些类型不能够直接通过网络传输或者文本存储,因为传过去之后是个字符串,没办法转换回来。这个时候序列化就专门为此而生,让数据能够转换自如。二.如何进行序列化这个时候用python给我们提供的各种函数可以实现,就是python已经给我们做好了这个工具,直接拿来用就行。json模块js原创 2021-05-21 16:02:07 · 152 阅读 · 0 评论 -
数据分析模块之pandas
一.Series函数导入Series函数from pandas import Series创建:#index指定索引名称,默认0,1,2,3....,默认就是一列Series([1,2,3,4,5],index=['a','b','c','d','e'])索引操作:a['a']a[1]a.head(4)a.tail(3)#去重s = Series([1,1,1,1,2])s.unique()pd.isnull() ,pd.notnull():s2 = Series(原创 2021-05-17 14:27:37 · 71 阅读 · 0 评论 -
python数据分析之numpy模块
Numpy是python语言的一个扩展程序库,支持大量的维度数组和矩阵运算。导入numpy模块:import numpy as npnumpy.array():数据类型需要一致,不然会自动转成字符串型#构建二维数组np.array([[1,2,3],[5,6,7]])#构建一维数组np.array([1,3,5,7,8])构建三维数组np.array([[[1,2,4],[24,5,7]]])举例:#对图片进行操作#利用matplotlib模块获取图片数组import m原创 2021-05-17 12:20:59 · 191 阅读 · 0 评论 -
python c/s远程执行命令
server端:import socketimport subprocessphone = socket.socket()phone.bind(('127.0.0.1',52233))phone.listen(2)print ('等待连接。。。')while 1: conn, addr = phone.accept() print (addr[0] + '连接成功。') while 1: try: client_data原创 2021-03-26 16:19:41 · 89 阅读 · 0 评论 -
python 随笔
def aaa(sex,age,job,height,weight): print (f'性别:{sex},年龄:{age},身高:{height},体重:{weight},职业:{job}')#aaa('女','18-25','讲师')aaa('男','20-30','IT',weight='50',height='170')# def int max_num(a,b):# if a > b:# return a# else:#原创 2021-03-23 20:28:57 · 119 阅读 · 0 评论 -
python利用代理爬取数据、处理cookie、处理验证码登入
一.利用代理http连接池耗尽:headers中加入Conection:"close"import requestsheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}url = 'https://www.baidu.com/s?wd=ip'#使用代理原创 2021-03-22 13:31:09 · 438 阅读 · 0 评论 -
爬虫之提取数据
1.正则:##糗图百科import requestsimport reimport osdirname = './imgfile'if not os.path.exists(dirname): os.mkdir(dirname) url = 'https://www.qiushibaike.com/imgrank/page/%d/'headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl原创 2021-03-19 15:01:42 · 1056 阅读 · 0 评论 -
python爬虫
安装requests:pip install requests获取百度首页:import requestsurl = 'https://www.baidu.com/'response = requests.get(url=url)response.encoding = 'utf-8'page_text = response.textpage_textwith open('baidu.html','w',encoding='utf-8') as fp: fp.write(page_原创 2021-03-18 12:33:23 · 121 阅读 · 0 评论 -
python字典推导式、列表推导式、集合推导式、匿名函数
列表转字典:list = ["a","b","c","d","e"]dict1 = {}for index in range(len(list)): dict1[index] = list[index]print(dict1)输出:{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}字典推导式:list = ["a","b","c","d","e"]# dict1 = {}# for index in range(len(list)):#原创 2021-02-08 15:11:13 · 157 阅读 · 0 评论 -
python生成器
什么是生成器?本质就是迭代器,与迭代器的唯一区别就是生成器是我们自己用python代码构建的。产生生成器的方式1.生成器函数----yield:def func(): puber = (1,3,34,4) for i in puber: yield iret = func()print(next(ret))print(next(ret))print(next(ret))print(next(ret))#yield 不结束函数,给next返回值,原创 2021-02-05 10:34:15 · 77 阅读 · 0 评论 -
函数名的几种用法
1.函数可以当作值被赋予变量def func(): bu = (1,2,3,'abc',{'name':'ligen'}) print (bu)a = funca()2.函数名可以当作函数的参数def func(*args): dict1 = {'name':args[0],'age':args[1],'box':args[2]} for key in dict1: print (key) print ('*'*20) for v原创 2021-02-04 16:27:28 · 2270 阅读 · 0 评论 -
python迭代器及递归
1.可迭代对象有且不限:list,dict,str,set,tuple查看是否是可迭代对象方式:print(dir(list))#输出list所有的方法,其中包含__iter__()方法就是可迭代对象可迭代对象的好处:使用灵活、直接查看值缺点:消耗内存2.迭代器:官方声明只要具有__iter__()方法、next()方法就是迭代器f = open("aaaa","w")f.__iter__()f.__next__()#文件句柄就是迭代器3.可迭代对象转换成迭代器li原创 2021-02-04 16:25:41 · 225 阅读 · 0 评论 -
*args,**kwargs在函数定义、函数执行、函数外的作用意义
1.处在函数定义位置主要作用是万能形参,不固定形参数量*args:聚合成一个元组,位置实参有多个,最终都聚合成一个元组形式。**kwargs: 聚合成一个字典,适用于关键字参数。def eat(*args): print (f'args is {args}') sum = 0 for i in args: sum += i print ('*'* 10) print (sum)eat(1,2,3,4,5,6)def eat(*args原创 2021-01-05 17:08:14 · 129 阅读 · 0 评论 -
提取数据
#/usr/bin/pythona = { "msg": "success", "status": 1, "data": [ { "V12211_301": -6.2, "V119041": 166, "V20003": "0", "V119042": 166, "V119001": 6, "V119002": 6,原创 2021-01-05 16:08:32 · 161 阅读 · 0 评论 -
python 类的继承
继承方式一:#!/bin/bashclass People(object): color = 'red' tall = '170' def __init__(self,c = 'blue'): self.color = c def test(self): print "he is %s" % self.colorclass Ss(People): def __init__(self): People.__i原创 2020-10-30 14:15:38 · 75 阅读 · 0 评论 -
python threading模块
python程序:#!/usr/bin/pythonimport threadingfrom time import ctime, sleeploops = [2,4,3]def loop(loop_num,sleep_time): print 'start loop',loop_num,'at:',ctime() sleep(sleep_time) print 'done loop',loop_num,'at',ctime()def sum_num():原创 2020-10-28 16:51:12 · 118 阅读 · 0 评论 -
python多线程编程thread模块锁的理解
thread模块python程序:#!/usr/bin/pythonimport thread from time import ctime,sleeploop = [2,4]def loops(loop_num,sleep_time,lock): print 'start loop',loop_num,'at:',ctime() sleep(sleep_time) print 'done loop',loop_num,'at:',ctime() lock.r原创 2020-10-28 15:18:21 · 124 阅读 · 0 评论 -
python发邮件以附件的方式
#!/usr/bin/python# -*- coding:UTF-8 -*-import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrfrom email.header import Headerimport sysfrom email.mime.multipart import MIMEMultipartdef mail(recv_people): mail_host原创 2020-10-21 17:25:21 · 172 阅读 · 1 评论 -
python 发邮件脚本-
第一版:无参数版本#!/usr/bin/python# -*- coding:UTF-8 -*-import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrfrom email.header import Headerdef main(): mail_host = 'smtp.126.com' mail_passwd = 'GMMVYVTTBJUVOGICD'原创 2020-10-21 16:43:06 · 326 阅读 · 0 评论