![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python高级用法
生有涯,知无涯
登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。
展开
-
python实现文件断点下载
1.需求: 实现文件的断点下载2.实现:#!/usr/bin/python# encoding=utf-8import requests, sys, os, re, timeclass download: def __init__(self, config={}): self.config = { 'block': int(config['block'] if 'block' in config else 1024), }原创 2022-05-30 16:00:19 · 2441 阅读 · 0 评论 -
sqlalchemy case when分组查询统计
1.需求根据过滤条件将设备按升级状态分组,统计总数和各个状态的数量。2.原始数据3.原生sql语句select count(*) as "total", sum(case when upgrade_status='failed' then 1 else 0 end) as "failed_count", sum(case when upgrade_status='unstarted' then 1 else 0 end) as "unstarted_count", sum(case wh原创 2021-08-10 18:57:43 · 3226 阅读 · 0 评论 -
多线程、多进程守护工具
import osimport sysimport timeimport loggingimport threadingimport multiprocessingclass ThreadDaemonTool(object): """多线程守护工具""" def __init__(self, thread_info_list, interval=30, heart_period=5, event=None, logger=None): if not isin原创 2021-08-08 20:59:25 · 166 阅读 · 0 评论 -
pipenv的基本使用
1. 虚拟环境虚拟环境是用于依赖项管理和项目隔离的python工具,它可以将python程序和pip包管理工具安装在本地的隔离目录中(非全局安装)。在实际开发中,不同项目可能需要的python版本和项目的第三方依赖包的版本不同,因此需要使用到虚拟环境来管理不同的项目。2. pipenv简介pipenv发布于2017年1月,它是一种Python依赖管理工具,你可以把它看做是pip和virtualenv的组合体,它基于Pipfile的依赖记录方式,用于替代旧的记录方式requirements.txt。原创 2021-07-27 10:08:28 · 918 阅读 · 0 评论 -
python设备分组(部门分组等)功能设计
1.数据库设计2.python获取设备分组树结构DATA = [{'group_id': 1, 'group_name': '桂妃山', 'parent_group_id': None, 'description': None, 'order_num': 1, "group_level": 1}, {'group_id': 2, 'group_name': '1栋1层', 'parent_group_id': 1, 'description': None, 'ord原创 2021-06-23 19:09:05 · 362 阅读 · 0 评论 -
Python threading模块 Lock 和 RLock 的区别
1.解释1.1 Lock:Lock锁是Python的原始锁,在锁定时不属于任何一个线程。在调用了 lock.acquire() 方法后,进入锁定状态,lock.release()方法可以解锁。底层是通过一个函数来实现的,会根据不同的操作系统选择一个最有效的版本实例1.2 RLock:RLock被称为重入锁,RLock锁是一个可以被同一个线程多次 acquire 的锁,但是最后必须由获取它的线程来释放它,不论同一个线程调用了多少次的acquire,最后它都必须调用相同次数的 release 才能完全释原创 2021-01-11 15:29:01 · 1492 阅读 · 1 评论 -
python使用多进程multiprocessing并汇总每个子进程的返回值(获取项目git分支列表)
业务需求: 使用多进程执行业务代码提高系统效率,但要能够获取并汇总每个子进程的运行结果示例:获取一批git项目的分支列表import osimport multiprocessingfrom multiprocessing import Managerimport auto_arrange.arrange as arrange_liblocal_root_directory = '/root/auto_arrange_env/'def get_local_app_directory(ap原创 2020-11-18 17:10:30 · 2175 阅读 · 0 评论 -
python获取远程服务器连接并对进程操作
1.获取远程服务器连接from fabric2 import Connectiondef get_server_conn(remote_ip, gateway_ip, gateway_port, password): """ 获取服务器远程连接 :param remote_ip: 远程服务器内网ip :param gateway_ip: 网关ip(跳板机ip) :param gateway_port: 网关端口(跳板机端口) :param password:原创 2020-11-13 14:56:38 · 849 阅读 · 1 评论 -
python列表推导式的条件判断语句位置
1.列表推导式总共有两种形式:①[x for x in data if condition]此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后统一生成为一个数据列表②[exp1 if condition else exp2 for x in data]此处if…else主要起赋值作用,当data中的数据满足if条件时将其做exp1处理,否则按照exp2处理,最后统一生成为一个数据列表2.示例a_list = [1, 2, -3, 0, -4, 5, -6]b_原创 2020-11-03 15:45:05 · 2032 阅读 · 2 评论 -
python-根据给定的时间范围计算年、季、月、周的开始和结束日期
1.根据给定的日期字符串,获取当天所在年、季度、月、周的开始和结束日期def get_first_and_last_day(date_str): """ 获取指定日期的开始、结束日期 :param date_str: 字符串格式 '2020-08-21' :param need_key: 字符串格式 'year','quarter' :return: """ result = {} struct_date = datetime.datetim原创 2020-08-29 11:51:37 · 5169 阅读 · 2 评论 -
2020.05.10武汉TRX记录
1. mysql里,union 和union all 区别?Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;Union All:对两个结果集进行并集操作,包括重复行,不进行排序;从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。2.mysql查询中,where,group by having 的顺序?select五种子句: where 条件查询 ,不能跟聚合函数,常用运算符过原创 2020-05-10 22:13:39 · 139 阅读 · 0 评论 -
python下载远程服务器日志
# coding=utf-8import paramikohost_ip = '*.*.*.*' # 不需要带端口port = 189 # 服务器连接端口username = 'root' # 远程服务器登录用户名password = '*********' # 密码remote_path = '/data/redis/logs/redis.log' # 日志文件路径lo...原创 2020-04-13 11:04:39 · 387 阅读 · 0 评论 -
APScheduler任务调度工具在Django项目中的使用
1. APSchedulerAPScheduler:强大的任务调度工具,可以完成定时任务,周期任务等,它是跨平台的,用于取代Linux下的cron daemon或者Windows下的task scheduler。内置三种调度调度系统:Cron风格(具有可选的开始/结束时间)间隔性执行仅在某个时间执行一次2.代码演练# coding=UTF-8import init_enviro...原创 2020-01-18 16:28:58 · 1521 阅读 · 0 评论 -
Python字典列表的操作
1.对现有字典列表(列表中的元素是字典格式)进行排序# coding=UTF-8"""要求:按倒序排序"""group_list = [{'group_code': 22, 'group_name': 'dev'}, {'group_code': 5, 'group_name': 'design'}, {'group_code': 3...原创 2020-01-09 20:28:58 · 2107 阅读 · 0 评论 -
Python使用set()对对象进行去重解决思路
问题背景:ORM查询出来多个对象列表,例如list1 = list(Adgroup.objects.filter(shop_id=shop_id,adgroup_id__in=adgroup_id_list1))list2 = list(Adgroup.objects.filter(shop_id=shop_id,adgroup_id__in=adgroup_id_list2))lis...原创 2019-12-18 21:53:49 · 1195 阅读 · 0 评论 -
Python对多个列表求交集并集和差集(补集)
1.求多个list的交集输入:"""以a、b、c为实验对象,求a、b、c都同时拥有的元素"""a = [0,1,2,3,4]b = [0,2,6]c = [-1,2,5,8]# 求多个list的交集:a、b、c同时拥有的元素r = list(set(a).intersection(b,c)) print('r -->', r) # 输出r --> [2]2....原创 2019-12-18 21:36:15 · 3931 阅读 · 0 评论 -
字典列表排序sorted()方法lambda和operator .itemgetter
实例我们先声明一个列表,里面元素为字典data = [ {'age': 31, 'city': 'taipei', 'name': 'amy'}, {'age': 71, 'city': 'tokyo', 'name': 'john'}, {'age': 16, 'city': 'london', 'name': 'zoe'}, {'age': 16, 'cit...原创 2019-11-14 18:27:24 · 315 阅读 · 0 评论 -
python 打印高亮-日志输出颜色控制
一、语法1.实现过程终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。控制字符颜色的转义序列是以ESC开头,即用\033来完成2.书写过程开头部分: \033[显示方式;前景色;背景色m结尾部分: \033[0m注意:开头部分的三个参数:(1)显示方式,前景色,背景色是可选参数,可以只写其中的某一个;(2)另外由于表示三个参数不同含义的数值都是唯一...原创 2019-10-31 11:24:56 · 3101 阅读 · 0 评论 -
python的datetime.date日期计算——计算当月第一天、当月最后一天、前月第一天、前月最后一天、次月第一天、次月最后一天、去年的当天日期等
一、各种日期计算方法# -*- coding: utf-8 -*-import datetimeimport calendar# 1.初始化一个datetime.date类型的日期,多种方式# init_date = datetime.date(2008, 1, 3) # <class 'datetime.date'>init_date = datetime.date...原创 2019-10-30 14:05:00 · 4957 阅读 · 0 评论 -
利用Python使用一行语句实现嵌套列表的平铺(3种方法)
1.问题引入:将列表demo_list = [[1, 2, 3], [4, 5, 6], [-1, -2, -3]],每个元素拆开平铺成一个新列表(去掉内层的中括号)。2.代码from itertools import chain"""python实现嵌套列表的平铺"""demo_list = [[1, 2, 3], [4, 5, 6], [-1, -2, -3]]# 方法一...原创 2019-10-15 14:51:15 · 3166 阅读 · 1 评论 -
python中的单元测试
1.什么是单元测试?程序开发过程中,写代码是为了实现需求。当我们的代码通过了编译,只是说明它的语法正确,功能能否实现则不能保证。 因此,当我们的某些功能代码完成后,为了检验其是否满足程序的需求。可以通过编写测试代码,模拟程序运行的过程,检验功能代码是否符合预期。单元测试就是开发者编写一小段代码,检验目标代码的功能是否符合预期。通常情况下,单元测试主要面向一些功能单一的模块进行。举个例子:一部...原创 2019-06-07 00:03:09 · 319 阅读 · 0 评论 -
python-使用itsdangerous生成临时身份令牌
1.作用:可以利用itsdangerous模块支持JSON WEB签名。2.安装如项目使用到虚拟环境,终端先【workon 虚拟环境名称】再安装pip install itsdangerous3.使用itsdangerous模块(1)使用TimedJSONWebSignatureSerializer生成带有有效期的token—加密from itsdangerous impor...原创 2019-06-09 20:07:45 · 699 阅读 · 0 评论 -
Python标准库shutil用法记录
shutil模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能1.文件夹与文件操作copyfileobj(fsrc, fdst, length=16*1024): 将fsrc文件内容复制至fdst文件,length为fsrc每次读取的长度,用做缓冲区大小fsrc: 源文件fdst: 复制至fdst文件length: 缓冲区大小,即fsrc每次读取的长度i...原创 2019-06-19 15:56:49 · 276 阅读 · 0 评论 -
python三大器之一——装饰器详解
python的三大器指的是:装饰器、迭代器、生成器,下面就装饰器整理一下从各种资源收获的对装饰器的理解。1.理解装饰器之前先要理解函数引用的概念def func(): print("hello world!")# 调用函数func()# 引用函数ret = funcprint(id(ret))print(id(func))# 通过引用调用函数ret()运行结果re...原创 2019-06-10 22:56:15 · 336 阅读 · 0 评论 -
python装饰器@property属性的使用
1. 什么是property属性一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法定义:class Foo: def func(self): pass # 定义property属性 @property def prop(self): pass调用foo_obj = Foo()foo_obj.func...原创 2019-06-05 07:44:19 · 485 阅读 · 0 评论 -
xmltodict 模块处理xml数据基本用法
xmltodict 是一个用来处理xml数据的很方便的模块。包含两个常用方法parse和unparse1. parsexmltodict.parse()方法可以将xml数据转为python中的dict字典数据:>>> import xmltodict>>> xml_str = """... <xml>... <ToUserNam...原创 2019-06-21 23:39:13 · 7313 阅读 · 0 评论 -
python多继承的MRO顺序:多继承查找规则
一、mro序列MRO是一个有序列表L,在类被创建时就计算出来。通用计算公式为:mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )(其中Child继承自Base1, Base2)如果继承至一个基类:class B(A)这时B的mro序列为mro( B ) = m...原创 2019-07-02 00:12:21 · 1581 阅读 · 0 评论 -
python的高阶函数-map()/reduce()/filter()/sorted()
高阶函数:就是把函数当成参数传递的一种函数。例如以下函数即为一个高阶函数。1.高阶函数示例"""abs绝对值"""def add(x, y, f): return f(x) + f(y)print(add(-8, -22, abs))注解:1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值2.最后再做和运算2.map()函数pyt...原创 2019-07-08 13:00:50 · 132 阅读 · 0 评论 -
python3调用C语言代码
1. python为什么要调用c ?python不擅长"大量运算"任务;python程序优势在于:编写简单,适合"IO密集型作业"(比如打开文件,下载图片,运行脚本).python作为知名的"胶水语言",快速实现"计算密集型作业"的方法就是"把c的代码拿过来直接用"!2. python调用c语言代码的方式,只需四步:2.1 将.c后缀的文件编译为动态库文件(.so结尾)格式gcc 原...原创 2019-07-09 16:59:33 · 1629 阅读 · 0 评论 -
python 中 random模块的用法
random模块创建随机数很方便,节省了大量时间.import randomprint( random.randint(1,10) ) # 产生 1 到 10(包含10) 的一个整数型随机数 print( random.random() ) # 产生 0 到 1 之间的随机浮点数print( random.uniform(1.1,5.4) ) ...原创 2019-07-11 10:02:12 · 761 阅读 · 0 评论 -
pickle模块和base64模块的使用
1.pickle模块pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高。pickle.dumps()将python数据序列化为bytes类型pickle.loads()将bytes类型数据反序列化为python的数据类型import pickled = {'1': {'count': 10...原创 2019-07-16 14:56:30 · 252 阅读 · 0 评论 -
Python的内建模块itertools的使用-含排列组合
itertools模块itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。1.无限迭代器(1)count(初值=0, 步长=1):count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可...原创 2019-07-19 11:52:29 · 472 阅读 · 0 评论 -
python的多线程及线程同步方式
1.线程执行join与setDaemon1.子线程在主线程运行结束后,会继续执行完,如果给子线程设置为守护线程(setDaemon=True),主线程运行结束子线程即结束;2 .如果join()线程,那么主线程会等待子线程执行完再执行。import threadingimport timedef get_thread_a(): print("get thread...原创 2019-07-17 09:37:23 · 7433 阅读 · 0 评论 -
python3数字取舍相关的几个方法及round()函数的坑
1. math.ceil(x): 函数返回数字x的上入整数。实例:import math # This will import math moduleprint "math.ceil(-45.17) : ", math.ceil(-45.17)print "math.ceil(100.12) : ", math.ceil(100.12)print "math.ceil(100....原创 2019-09-02 14:06:12 · 275 阅读 · 0 评论 -
python3的内建函数zip()和enumerate()
一.zip()1.描述zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。我们可以使用 list() 转换来输出列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。2.语法zip 语法:zip([iterable, ...])参数说...原创 2019-10-09 16:51:19 · 177 阅读 · 0 评论 -
python中关于导包出现的bug及解决方案
bug 1:提示不能导入名为XXXX的包例如:flask中,注册蓝图的时候,需要导入相应的蓝图,很可能就会出现这个问题ImportError: cannot import name 'XXXX'解决思路:这种类型的bug,绝大多数都是循环导入(相互引用)引起的,可以查看错误信息位置或者查看调用堆栈,查看每一步调用的顺序。最直接有效的方法就是将出错的包或模块在使用的时候再导入,不要在程序最上...原创 2019-06-06 23:29:16 · 1437 阅读 · 0 评论