Python
文章平均质量分 57
Looooking
Looking 的网页备忘录
展开
-
TimedRotatingFileHandler 修改 suffix 后 backupCount 设置失效无法自动删除文件
本文主要分析 Python 日志模块的 TimedRotatingFileHandler 在实际使用中 backupCount 设置未生效的问题。源码分析显示,文件删除依赖于后缀 suffix 的正则匹配,如果自定义了 suffix 格式,必须同步更新 extMatch 的正则表达式(保证正则表达式可以正常匹配到你新格式的日志文件)。原创 2024-09-12 17:17:12 · 351 阅读 · 0 评论 -
Python 之 func_timeout 设置函数最大超时时间
通过 func_set_timeout 对函数进行装饰来限定函数的最大超时时间,超时则报错 FunctionTimeOut,不超时则正常运行。原创 2024-07-24 16:38:32 · 170 阅读 · 0 评论 -
Python 之 try 无法使用全局变量的问题
当我们使用 try 语句时,如果在 try 中使用了全局变量,但又在 except 或 finally 中修改了这个全局变量,就会出现无法修改全局变量的情况。原创 2024-07-16 16:13:52 · 224 阅读 · 0 评论 -
Python 之微信指数小程序数据抓取
Python 之微信指数小程序数据抓取原创 2024-05-29 18:55:30 · 1032 阅读 · 0 评论 -
Python 之程序截图的几种方式(含chromedriver下载链接)
Python 使用程序截图常见的几种方式,这里简单归结了几种原创 2024-05-24 00:43:54 · 426 阅读 · 0 评论 -
Python 之数据库表读取和写入
Python 之数据库表读取和写入原创 2024-05-20 16:48:09 · 594 阅读 · 0 评论 -
Python 之 ini 配置文件读取和写入
Python 之 ini 配置文件读取和写入原创 2024-05-18 17:31:21 · 248 阅读 · 0 评论 -
GF(2)[x] 上的8次不可约多项式求解
GF(2)[x] 指系数为 0、1 的多项式。之前在学校有做过有限域 GF(2^8) 上的密码算法研究,而构成有限域 GF(2^8) 的其中一个必要条件就是选取一个 GF(2)[x] 上的8次不可约多项式(使得有限域上的加减乘除和求逆在 mod 这个不可约多项式后能正常运算。),下面是当时暴力求解的代码,于是记录一下。原创 2024-04-21 23:18:21 · 268 阅读 · 0 评论 -
Python 之 Fastapi 框架学习
Fastapi 据说有并肩Go的极高性能,我倒是想特别见识一下。原创 2024-04-03 10:43:50 · 684 阅读 · 0 评论 -
Python 之 Flask 框架学习
flask 作为轻量级的 web 框架,早些时候使用过,最近再来回看一下,依赖安装相关的就不多说了,直接从例子开始。原创 2024-04-02 17:11:59 · 1425 阅读 · 0 评论 -
Minio 的 Python 使用
服务启动就不多说了,主要是下载这个minio文件:https://dl.min.io/server/minio/release/linux-amd64/minio,然后 chmod +x minio,再按照下边启动就可。服务的启动[root@master packages]# export MINIO_ACCESS_KEY=minio_access[root@master packages]# export MINIO_SECRET_KEY=minio_secret[root@master p原创 2020-12-18 11:52:38 · 4343 阅读 · 0 评论 -
ZMQ特点及消息模式
普通的socket是端对端的关系,ZMQ是N:M的关系,socket的连接需要显式地建立连接,销毁连接,选择协议(TCP/UDP)和错误处理,ZMQ屏蔽了这些细节,像是一个封装了的socket库,让网络编程变得更简单。"慢连接": 我们不知道订阅者是何时开始接受消息的,就算启动"订阅者",再启动"发布者", "订阅者"还是会缺失一部分的消息,因为建立连接是需要时间的,虽然时间很短,但不是零。有种简单的方法来同步"发布者" 和"订阅者", 通过sleep让发布者延迟发布消息,等连接建立完成后再进行发送。原创 2022-10-09 18:22:08 · 4064 阅读 · 0 评论 -
Python 的 pytest 测试框架
说到 pytest,大家总不免要拿来和 unittest 来比一下,但是 unittest 毕竟是标准库,兼容性方面肯定没得说,但要论简洁和方便的话,pytest 也是不落下风的。简单测试示例def func(x): return x + 1def test_answer(): assert func(3) == 5Testing started at 15:57 ...Launching pytest with arguments test.py::test_an原创 2022-01-28 15:44:17 · 1778 阅读 · 0 评论 -
Python 的迭代器和生成器
迭代器(Iterator)迭代器是用于进行迭代操作的对象,它可以像列表一样使用 for 迭代获取其中的每一个元素,任何实现了 __next__ 方法的对象都可以称为迭代器。迭代器与列表的区别在于,列表是一次性把所有的元素加载到内存,迭代器则是使用延迟计算的方式返回元素,只有在调用 next 方法的时候才去计算并返回该元素,也即 call by need 的方式,for 循环本质上也是不断调用迭代器的 next 方法来进行遍历。下面以斐波那契数列为例实现一个迭代器:class Fib:原创 2021-12-30 11:48:41 · 497 阅读 · 0 评论 -
Python 单元测试框架 unittest
虽然并不是专门做测试的,但是测试方面的知识涉猎一下还是没什么坏处的。具体细节的可以访问官网文档查看:unittest --- 单元测试框架 — Python 3.10.1 文档常用的断言方法: Method Checks that assertEqual(a,b) a==b assertNotEqual(a,b) a!=b assertTrue(x)...原创 2021-12-28 19:37:18 · 596 阅读 · 0 评论 -
Python 中 * 和 ** 的参数匹配和解包
这个知识点应该在很多地方能找到,我只是顺便把它记录在我的网页备忘录里边,如有打扰,十分抱歉。Python中的 * 和 **,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的。参数匹配* 的作用:在函数定义中,收集所有的位置参数到一个新的元组,并将这个元组赋值给变量 argsdef func(*args): print(args)func(1, 2, 3, 4)(1, 2, 3, 4)** 的作用:在函数定义中,收集关键字参数传递给一个字典,并将这原创 2021-12-27 20:32:59 · 562 阅读 · 0 评论 -
Python 的 random 模块
真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统原创 2021-12-22 16:12:14 · 1780 阅读 · 0 评论 -
Python 求列表的最长升序子列
这块用到了 bisect 的二分查找模块,用于查找新元素在有序列表里边的插入位置。虽然之前有接触过 git 里边的 git bisect(用于定位某个 bug 第一次引入的 commitId),但是 python 里边对bisect 的真正理解还是来源于下面这个例子:import bisectinput_list = [1, 2, 4, 3, 5]sequence = []for ele in input_list: pos = bisect.bisect_left(sequenc.原创 2021-12-06 16:51:11 · 499 阅读 · 0 评论 -
Python 求两个正整数的最大公约数和最小公倍数
# 最大公约数# 辗转相除法(递归)def gcd(a: int, b: int): if b == 0: return a else: return gcd(b, a % b) # 最小公倍数(以最大公约数的结果为基础)def lcm(a: int, b: int): return int((a * b) / gcd(a, b)) print(lcm(25, 15))print(gcd(25, 15))...原创 2021-12-03 16:56:12 · 18519 阅读 · 0 评论 -
Python 中的 for else 语法
这个语法应该是存在了好长一段时间了,但是大家一直不怎么用,而且实际工程上用得人也比较少,但自己比较好奇,所以索性写一下。测试不用 breakfor i in range(5): if i == 3: continue print(i)else: print('hello')0124hello测试发现,如果 for 循环可以正常循环完毕到结束的话,else 的代码是会执行的。使用 breakfor i in range(5):原创 2021-11-27 15:32:09 · 690 阅读 · 0 评论 -
Python 生成文件或字符串的 sha256
例子当然要简洁,废话当然要少说,这块主要以 sha256 为例来进行说明,当然你可以选择 sha512 等其他算法!文件的 sha256这里唯一要注意的一点:文件一定要以二进制的形式打开读取!import hashlibpath = 'setup.py'algorithm = hashlib.sha256() # hashlib.sha512()with open(path, 'rb') as f: algorithm.update(f.read())print(algor原创 2021-11-16 15:10:26 · 3518 阅读 · 0 评论 -
Python 求列表的所有 k 阶排列
既然谈到排列,当然要和组合的结果对比一下才更直观,更有意思!!!组合import itertoolsinput_list = [1, 2, 4]k = 2print(list(itertools.combinations(input_list, k)))k = 3print(list(itertools.combinations(input_list, k)))[(1, 2), (1, 4), (2, 4)][(1, 2, 4)]排列import itertoo.原创 2021-11-13 18:36:41 · 632 阅读 · 0 评论 -
Python 的 itertools 模块
Python 当中的 itertools 模块的存在感一直不高,可能是大家真正用到的时候并不多。然而,最近它却成功引起了我的注意,它在时大放异彩,所以,不妨再来学一学,不求别的,只求在解决问题的过程当中至少能成功想到它一次。itertools.combinations求列表的 k 阶子列import itertools input_list = [1, 2, 4, 3, 5]n = len(input_list)k = 3for i in range(1, n + 1): i原创 2021-11-13 11:26:30 · 1326 阅读 · 0 评论 -
Python 求列表的所有 k 阶子列
这儿的k阶子列和线性代数里边矩阵的 k 阶子式 差不多,子列个数也和排列组合的公式相符,所以我就不啰嗦了。import itertoolsinput_list = [1, 2, 4, 3, 5]n = len(input_list)result = []for k in range(1, n + 1): k_subsequence = itertools.combinations(input_list, k) if k == 3: result.app..原创 2021-11-11 08:44:16 · 885 阅读 · 0 评论 -
机试刷题(华为)
import sysif __name__ == '__main__': for x in sys.stdin: a = x.strip().split(',') # b = [1, 2, 3, 4, 6, 8, 9, 10] b = list(map(int, a)) b.append(b[-1] + 2) # 确保...原创 2020-03-26 11:00:31 · 893 阅读 · 2 评论 -
Python 解析 spec 文件
参考链接:python-rpm-spec · PyPI安装模块先使用 pip 安装python-rpm-spec 模块pip3 install python-rpm-spec使用示例test.specName: pandasVersion: 0.25.3Release: 2Summary: Data structures and data analysis tools for PythonLicense: .原创 2021-10-11 15:02:36 · 3848 阅读 · 0 评论 -
Python 对字符串同时按照多个分隔符分割成列表
Python 的字符串默认是有一个 split 来把字符串分割成列表的:>>> test_str = "hello world,nice to meet you">>> test_str.split(',')['hello world', 'nice to meet you']>>> test_str.split(' ')['hello', 'world,nice', 'to', 'meet', 'you']如果我想让上面的字符串同时按原创 2021-09-10 11:45:16 · 5260 阅读 · 2 评论 -
Python 从 pyc 中获取编译 pyc 的 python 版本
import structPYTHON_MAGIC = { # Python 1 20121: (1, 5), 50428: (1, 6), # Python 2 50823: (2, 0), 60202: (2, 1), 60717: (2, 2), 62011: (2, 3), # a0 62021: (2, 3), # a0 62041: (2, 4), # a0 62051: (2, 4), # .原创 2021-09-09 09:35:13 · 2022 阅读 · 0 评论 -
输出日志到控制台和日志文件
import loggingimport logging.handlersfrom pathlib import Pathclass Logs(object): """ 日志类,日志分流 """ def __init__(self): log_dir = Path('log') if not log_dir.is_dir(): log_dir.mkdir(parents=True) sel.原创 2021-09-04 11:13:34 · 686 阅读 · 1 评论 -
pip is configured with locations that require TLS/SSL
我这儿是出现在 centos6.8 上安装 python3.7 以后,pip 无法正常 install 安装依赖模块。[root@centos68 insight-tool]# pip3 --versionpip 10.0.1 from /usr/local/python3.7/lib/python3.7/site-packages/pip (python 3.7)[root@centos68 insight-tool]# pip3 install -r requirement.txt pip原创 2021-08-30 10:13:43 · 14531 阅读 · 0 评论 -
Python 中两个文件相互 import 会导致导入失败
# t1.pyfrom t2 import NAMEAGE = 20print(NAME, AGE)# t2.pyfrom t1 import AGEprint('hello world')NAME = 'AA'#print(NAME, AGE)[root@master ~]# python3 ./t1.py Traceback (most recent call last): File "./t1.py", line 1, in <module> .原创 2021-08-18 19:14:03 · 1673 阅读 · 0 评论 -
Python 正则表达式
字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multil原创 2020-11-06 14:51:46 · 616 阅读 · 0 评论 -
Python3 源码安装
现在大部分都可以直接用 yum install python3 去直接安装 pyhon3 了,不过偶尔,肯定会有需求去安装不同版本的 python3,这时候源码包安装就会用上排场了;其实对任何软件,源码安装的方式都大同小异,无非就是解压、编译和安装。1. 下载源码包正常来说,首选当然是去官网下载(虽然有时候速度有些慢):https://www.python.org/downloads/source/。比如说可以下载 Python3.7 的压缩源码包:https://www.python.org/..原创 2021-08-10 11:30:33 · 1911 阅读 · 0 评论 -
Python 的 @property
如果使用 @property 进行修饰后,又在调用的时候,方法后面添加了(), 那么就会显示错误信息;也就是说添加 @property 后,这个方法就变成了一个属性,如果后面加入了(),那么就是当作函数来调用。class DataSet(object): @property def method_with_property(self): return 'method_with_property' def method_without_property(sel.原创 2021-08-03 15:06:36 · 142 阅读 · 0 评论 -
Python 中 shutil 的使用
Python 里边虽然 os 模块有一些文件目录创建和删除的部分简单操作,但是有一点很不太友好,就是删除目录的时候还必须让目录为空——虽然比较安全,我也能理解,但是让我很不爽,毕竟我想要的是rm -rf 的那种摧枯拉朽的气势:os.makedirs()os.makedir()os.remove()os.removedirs()os.rmdir()root@master ~# python3Python 3.6.8 (default, Aug 7 2019, 17:28:10) [.原创 2021-07-06 10:46:51 · 891 阅读 · 0 评论 -
Flask 实现文件上传和下载(简单但实用)
目录结构和代码root@master ~/w/upload# lltotal 4.0Kdrwxr-xr-x. 3 root root 21 Jul 2 17:32 static/drwxr-xr-x. 2 root root 25 Jul 5 17:40 templates/-rw-r--r--. 1 root root 819 Jul 5 09:55 upload.pyroot@master ~/workspace# tree upload/upload/|-- sta.原创 2021-07-05 17:49:03 · 9050 阅读 · 5 评论 -
Python 捕获全局的 KeyboardInterrupt 异常
当然,像下面这种情况。你要是把所有代码像下面那样都放到 try, except 的情况,就当我什么也没说。import timedef main(): print('before ...') time.sleep(10) print('after ...')if __name__ == '__main__': try: main() except KeyboardInterrupt: print('\nKeyboa原创 2021-06-15 15:54:43 · 22219 阅读 · 0 评论 -
Python 遍历网页目录并下载满足条件的文件
标题有点夸张,我最终的目的其实是:用 Python 从指定网页下载 centos7.6.1810 所有 src.rpm 源码包(我找过 centos 的镜像,都无一例外没有源码包目录,感觉很不人性化,而且网页上的源码文件也没有统一在一个目录下,手动下载那么多源码包好像也不太现实。不像 openEuler 至少还有个 https://repo.openeuler.org/openEuler-20.03-LTS-SP1/ISO/source/源码包镜像地址的链接)。这也是事情的起因。哈哈,这个主题可能不具.原创 2021-03-30 17:50:20 · 2910 阅读 · 1 评论 -
Python 的进程、线程和协程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。原创 2021-03-27 17:29:23 · 197 阅读 · 0 评论 -
Python 的 xmltodict 模块
哈哈,这好像是第三方依赖包,需要自己用 pip 去进行安装才可以使用的。pip3 install xmltodict至于这个模块是干什么的,其实看名字就能够猜到八九不离十。一般我们用 json、yaml 转换成 dict 可能多一些,xml 转到 dict 可能用得不多,不过,还是可以来看一看。xml 字符串解析先来个简单的 xml 瞧一瞧。<?xml version='1.0' encoding='utf-8'?><project> <ar.原创 2021-03-26 15:48:39 · 3953 阅读 · 3 评论