Python
python
Lewis-Liu.
临渊羡鱼,不如退而结网
展开
-
简单网络管理协议snmp及python netsnmp的使用
SNMP(Simple Network Management Protocol,简单网络管理协议)是互联网中的一种网络管理标准协议,广泛用于实现管理设备对被管理设备的访问和管理。SNMP网络架构由三部分组成:NMS、Agent和MIB。NMS(Network Management System,网络管理系统)是SNMP网络的管理者,能够提供友好的人机交互界面,方便网络管理员完成大多数的网络管理工作。Agent是SNMP网络的被管理者,负责接收、处理来自NMS的SNMP报文。在某些情况下,如接口状.原创 2020-08-24 10:46:21 · 572 阅读 · 0 评论 -
Python 的异常处理机制
如果我们没有对异常进行任何预防,那么在程序执行的过程中发生异常,就会中断程序,调用 python默认的异常处理器,并在终端输出异常信息。用try…except…捕获异常, 如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。如果里面的try捕获到了异常进行了处理就不会传递到外面。with open打开文件, 如果 with 语句或语句块中发生异常, 会调用默认的异常处理器处理, 但文件还是会正常关闭。.原创 2020-08-20 01:17:29 · 330 阅读 · 1 评论 -
Python内存管理与垃圾回收机制
内存管理机制:引用计数、垃圾回收、内存池。1.引用计数:当一个 Python 对象被引用时其引用计数增加 1,当其不再被一个变量引用时则计数减 1,当引用计数等于 0 时对象被删除。2.垃圾回收:引用计数-当 Python 的某个对象的引用计数降为 0 时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。标记清除-如果两个对象的引用计数都为 1,但是仅仅存在他们之间的循环引用,那么这两个对象都是需要被回收的。分代回收3.内存池:Python 的内存机制呈现金字塔形状。第 1 层和第原创 2020-08-20 01:16:55 · 81 阅读 · 0 评论 -
import module和from module import *的区别
import module,引用模块中的变量时要用module.变量名;from module import *,引用模块中变量时只需直接使用变量名import module,使用模块中的变量时,使用的是原模块中的变量,不会创建新的变量;from module import *,使用模块中的变量时,会把原模块中的变量复制到本地,会创建新的对象。开发中建议用import module。...原创 2020-08-19 09:12:31 · 1917 阅读 · 0 评论 -
Python正则re.match,search,findall,sub 的区别
match()函数只检测 RE 是不是在 string 的开始位置匹配,只有在 0 位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回 nonesearch()会扫描整个 string 查找匹配findall 查找多个字符,返回列表sub 将匹配到的数据进行替换,返回替换后的新字符串...原创 2020-08-18 15:32:59 · 366 阅读 · 0 评论 -
生成器、迭代器
在类里面定义__iter__和__next__方法创建的对象就是迭代器对象, for 语句对容器对象就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。生成器是一类特殊的迭代器,它不需要再像上面的类一样写__iter__()和__next__()方法了, 使用更加方便,它依然可以使用next函数和for循环取值。yield: 每次启动生成器都会返回一个值,多次启原创 2020-08-18 15:25:11 · 119 阅读 · 0 评论 -
map 函数和 reduce 函数
①从参数方面来讲:map()包含两个参数,第一个参数是一个函数,第二个是序列(列表 或元组)。其中,函数(即 map的第一个参数位置的函数)可以接收一个或多个参数。reduce()第一个参数是函数,第二个是序列(列表或元组)。但是,其函数必须接收两个参数。②从对传进去的数值作用来讲:map()是将传入的函数依次作用到序列的每个元素,每个元素都是独自被函数“作用”一次 。reduce()是将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算)。...原创 2020-08-18 15:22:29 · 562 阅读 · 0 评论 -
Python线程, 进程, 协程
进程进程是系统资源分配的最小单位,一个运行的程序就是一个进程的实例,进程拥有自己独立的内存空间,所以进程间数据不共享,资源开销大。进程之间通过队列进行通信。进程可以使用多核CPU。进程适用于CPU计算密集型的场景。线程线程是CPU调度执行的最小单位,不能独立存在,依赖进程存在, 一个进程至少有一个线程,而多个线程共享数据,共享全局变量, 资源开销小。线程之间共享数据,所以会产生资源竞争。为了避免这个问题,所以线程有GIL锁(全局解释器锁)和互斥锁。线程的多线程其实是伪多线程,是并发的。原创 2020-08-18 12:11:29 · 96 阅读 · 0 评论 -
Python深拷贝,浅拷贝的区别
浅拷贝会创建新对象, 拷贝顶层对象,但不会拷贝内部的子元素对象。外层内存地址发生改变, 内层元素内存地址不变。浅拷贝拷贝列表 a, 列表 a中有一个嵌套的list,我们修改了它,列表 a 也会发生变化。浅拷贝有三种形式:切片操作、工厂函数b = list(a)、copy 模块中的 copy 函数。深拷贝只有一种形式,copy 模块中的 deepcopy()函数。深拷贝拷贝了对象的所有元素,包括多层嵌套的元素,深拷贝拷贝出来的对象是一个全新的对象,内存地址改变,不再与原来的对象有任何的关联。当顶层对原创 2020-08-18 11:59:32 · 79 阅读 · 0 评论 -
*args,**kwargs的意思
*args 是不定长参数,他可以表示输入参数是不确定的,可以是任意多个。**kwargs 是关键字参数,赋值的时候是以键 = 值的方式,参数是可以任意多对。原创 2020-08-18 11:49:09 · 107 阅读 · 0 评论 -
简述 read,readline 和 readlines 的区别
read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,read()那么就表示读取文件中所有的数据readline()每只读取文件的一行,返回 str类型readlines()可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素...原创 2020-08-18 11:39:22 · 3312 阅读 · 0 评论 -
Python 中 is 和 == 的区别
Python 中的对象包含三要素:id、type、value。其中 id 用来唯一标识一个对象,type 多态,value 是对象的值。is 判断的是 a 对象是否就是 b 对象,是通过 id 来判断内存地址是否一致。==判断的是 a 对象的值是否和 b 对象的值相等,是通过 value 来判断的。...原创 2020-08-18 11:31:45 · 78 阅读 · 0 评论 -
lambda 匿名函数
lambda 函数是一个可以接收任意多个参数并且返回单个表达式值的函数sum = lambda arg1, arg2: arg1 + arg2sum( 10, 20 )应用场景:匿名函数,一般用来给 filter, map 这样的函数式编程服务作为回调函数,传递给某些应用,比如消息处理函数作为参数传递...原创 2020-08-18 11:20:02 · 87 阅读 · 0 评论 -
Python读取大文件的方法
使用生成器读取(指定读取长度)def read_file(file_obj, size=1024): while True: data = file_obj.read(size) yield data if not data: breakdef deal_data(data): passwith open('z.txt', 'r', encoding='utf-8') as f: for dat.原创 2020-08-12 18:17:17 · 200 阅读 · 0 评论 -
Python最简单的两种排序算法-冒泡,选择排序(代码,图解)
1.冒泡排序冒泡排序从列表的开头处开始,逐个比较相邻两个数据,如果前面的值大于后面的值,交换两个数据的位置,一直比较到列表的末尾。这个过程就是将最大的项以冒泡的方式排到末尾。然后算法从列表开头到倒数第二项重复这一过程,依次类推。def bubble_sort(alist): for j in range(len(alist)-1,0,-1): for i in range(j): if alist[i] > alist[i+1]: al原创 2020-07-17 23:15:48 · 1755 阅读 · 0 评论 -
爬取B站up主视频弹幕并生成词云图(2020年5月)
1. 打开一个视频2. 查看抓包信息找到弹幕接口3. 请求弹幕接口即可得到包含弹幕的xml4. 弹幕接口url带有oid参数,需要先获取oid,在网页源代码中搜索oid的值发现cid就是oid,可以通过正则来提取cid5. 代码实现# coding=utf-8import reimport requestsimport jiebaimport pandasimport matplotlib.pyplot as pltfrom lxml import etreefrom w原创 2020-05-14 03:03:30 · 1270 阅读 · 2 评论 -
给headers的params加引号
import repattern = '^(.*?): (.*)$'headers_str = """cc: 1ck: 1cl: 24-bitds: 1536x864vl: 216ep: 首页*web端总共query数et: 4ja: 0ln: zh-cnlo: 0lt: 1589799548rnd: 1205417506si: 64ecd82404c51e03dc91cb9e8c025574su: https://fanyi.baidu.com/"""for lin原创 2020-05-20 12:44:52 · 749 阅读 · 0 评论 -
Scrapy_redis分布式组件策略图解
scrapy_redis的流程scrapy_redis分布式组件:修改了scrapy在内存中保存数据的代码,将数据保存在redis数据库中,让所有爬虫端都可以访问redis数据库,读取请求队列。redis数据库里存储的数据:1. 请求对象队列;2. 请求指纹库(去重特征);3.提取的item数据分布式、断点续爬、持久化去重将数据保存在redis数据库里,程序中断后,数据不会丢失...原创 2020-04-24 22:44:18 · 236 阅读 · 0 评论 -
Scrapy爬虫框架
scrapy的流程爬虫中起始的url构造成request对象–>爬虫中间件–>引擎–>调度器调度器把request–>引擎–>下载中间件—>下载器下载器发送请求,获取response响应---->下载中间件---->引擎—>爬虫中间件—>爬虫爬虫提取url地址,组装成request对象---->爬虫中间件—>引擎...原创 2020-04-24 21:38:57 · 257 阅读 · 0 评论 -
数据提取-lxml模块
xpath语法-选取节点以及提取属性或文本内容的语法选取特定节点的语法选取未知节点的语法lxml模块的使用利用etree.HTML,将html字符串转化为Element对象,Element对象具有xpath的方法,返回结果的列表from lxml import etreehtml = etree.HTML(text) ret_list = html.xpath("xpath...原创 2020-04-24 18:07:48 · 148 阅读 · 0 评论 -
使用__new__实现单例模式
单例模式是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在,节约内存资源。class Singleton(): def __new__(cls): if not hasattr(cls, "_instance"): cls._instance = super().__new__(cls) return cls._instancea = Singleton()b = Singleton()print(id(a.原创 2020-07-15 15:22:39 · 810 阅读 · 0 评论 -
自定义日志类Logger
#coding:utf-8import sysimport loggingclass Logger(object): def __init__(self): # 1. 获取一个logger对象 self._logger = logging.getLogger() # 2. 设置format对象 self.formatter = logging.Formatter(fmt='%(asctime)s %(filename)s原创 2020-07-02 15:23:05 · 874 阅读 · 0 评论 -
Python遍历文件夹及其子文件夹中的所有文件
# coding:utf-8import ospath = "C:\\Users\\15527\\Desktop\\demo"def get_file(path, file_list): if os.path.isfile(path): file_list.append(path) elif os.path.isdir(path): for item in os.listdir(path): item_path = os.p原创 2020-07-15 21:57:01 · 694 阅读 · 0 评论 -
装饰器
装饰器本质上是一个 Python函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能,装饰器的返回值(return)也是一个函数对象。def test(func): def wrapper(*args, **kwargs): print("装饰器中的功能") return func(*args, **kwargs) return wrapper @test def foo(a, b, c): return a, b, c print(foo(1,2,.原创 2020-07-15 00:00:40 · 118 阅读 · 0 评论 -
利用redis实现一个队列Queue
# coding:utf-8import timeimport pickleimport redisfrom six.moves import queue as BaseQueueclass Queue(object): """ A Queue like message built over redis """ Empty = BaseQueue.Empty Full = BaseQueue.Full max_timeout = 0.3原创 2020-07-02 16:54:42 · 311 阅读 · 0 评论 -
python破解有道词典加密参数,简单GUI可视化界面操作(2020年5月)
1. 抓包2. 分析知道其中4个参数为加密数据,搜索其中一个参数salt搜索到一个js文件,点击大括号格式化查看查到4个参数打断点分析可知道 ts是13位时间戳,salt是时间戳加上一位0到9的随机数,bv是user-agent的md5加密数据,sign是几个字符串相加起来的md5加密数据代码实现# coding:utf-8import requestsimport timeimport randomimport hashlibimport tkinter as tkd原创 2020-05-20 22:55:51 · 496 阅读 · 0 评论 -
Python的特性
Python属于动态强类型解释型语言 动态 : 不需要实现声明变量类型,在运行时根据值的类型确定变量类型 静态 : 需要实现声明变量类型,在运行前需要确定类型才可以执行 强类型 : 变量类型不同,不可以混合计算,需要实现类型转换 弱类型 : 变量类型不同,可以混合计算 编译型语言: 在程序执行前,先通过编译器编译代码,生成可执行文件 解释型语言: 每次执行程序,都需要通过解释器按...原创 2020-04-24 21:42:17 · 187 阅读 · 0 评论