python
文章平均质量分 59
冰冷的希望
坚持记录,相互帮助,一起进步
展开
-
【python】使用pycryptodome完成AES加密解密
Python实现AES的库也有好几个,但是建议使用pycryptodome,这个库一直在维护更新,而且兼容更多Python版本以及系统平台。,翻译为高级加密标准算法,是一种对称密钥加密算法。虽然AES对称加密比较方便,但是还是不够安全,如果你希望使用对称加密,也可以参考一下之前的文章。AES加密过程大概是,明文被划分为若干个块,然后每个块使用密钥进行加密,最终生成密文。CBC模式除了密钥(key),还需要一个偏移量(iv),偏移量的值也是需要16个字符。原创 2024-01-17 15:40:10 · 1251 阅读 · 0 评论 -
【Python】使用nuitka打包Python程序为EXE可执行程序
写好的Python程序如果想要拿到其他电脑上运行,那还得安装一下Python环境和各种库,这是比较麻烦的,所以有必要把它打包成一个可执行的exe文件。但是使用pyinstaller打包出来的程序被360报毒了(主要是我的代码有系统权限操作,会触发报毒机制),后来换成nuitka打包就没有报毒。其实不手动安装也行,因为使用nuitka的时候它检测到没有安装就会提示你安装了,到时候输入"yes"就会自动安装了。因为nuitka是通过c++的方式进行编译的,所以还需要c++的编译环境,可以手动安装一下。原创 2023-08-02 16:09:34 · 3856 阅读 · 2 评论 -
【Python】tkinter的简单使用(Tk对象、三大布局、变量、事件)
tkinter是Python自带的标准库,无需额外安装,如果你的Python没有tkinter,请检查你的Python是否标准版。place布局既可以绝对布局也可以相对布局,灵活性非常高,可以直接指定元素的x、y的坐标(原点为窗口或父容器左上角),注意,如果元素位置有重叠,则后布局的元素会盖住前布局的元素。tkinter的元素控件或窗口都可以调用bind()、unbind()绑定、解绑事件,第一个参数是事件的描述,第二个参数是要回调的函数名。是对事件的修饰,比如说需要的辅助按键,双击还是三击等。原创 2023-04-18 16:37:33 · 3760 阅读 · 0 评论 -
【Python】使用pyinstaller打包Python程序为EXE可执行程序
我们写出来的Python代码需要配合解释器才能执行,并不能像C、Java等语言一样编译成可执行程序,所以在没有安装Python环境的电脑上就不方便运行py代码,为了解决这个问题,我们可以借助pyinstaller、cx_Freeze、nuitka等工具对Python代码打包,它们的优缺点可以自行百度,我这里介绍一下pyinstaller的用法。如果你的项目并不只有一个.py文件,即存在自定义模块,那就不要使用-F参数打包成单一的可执行程序,否则可能会因为路径问题导致不能正常工作。全部参数使用默认设置。原创 2023-02-01 16:37:39 · 1509 阅读 · 2 评论 -
【Python】pysimplegui主动事件(多线程执行耗时任务解决主线程卡死问题)
默认情况下我们习惯在主线程更新UI,但是,一旦遇到耗时任务,界面就会卡住,甚至进入假死状态,Win系统会提示你“程序无响应”,这明显对用户很不友好,所以我们要考虑把耗时任务放在子线程执行,主线程就只管更新UI,保证主线程不会卡死。关于PySimpleGUI的基本使用,可以参考之前的文章,开启多线程的方式我们都学过,但问题是,在子线程里执行任务就变得不好与主线程交互了,比如说,想要把子线程里的执行进度更新到UI,这就需要子线程与主程序进行交互,即主线程需要拿到子线程的数据。原创 2023-01-11 11:51:09 · 2382 阅读 · 0 评论 -
【Python】asyncio的使用(async、await关键字)
我们可以使用asyncio创建协程,把同步任务变成异步任务很简单,我们在定义函数的时候在前面加上async修饰,在耗时任务那行代码使用await修饰,这时候调用函数,它就会返回一个协程(coroutine)对象,然后调用asyncio.run()把协程对象丢进去就能执行了。在调用执行的时候,需要创建一个事件循环,在事件循环里执行任务,这样它会在耗时的时候自动切换到其他任务。假设有一个任务test(),需要执行三次,每次分别休眠2秒、1秒、3秒,如果是同步执行,一共需要耗时6秒。原创 2023-01-04 15:42:42 · 4245 阅读 · 2 评论 -
【Python】占位符格式化输出
Python的格式化输出有好几种方式,比较常用的是%格式化、format()方法以及3.6版本支持的f-string,这三种格式化的用法这里不讲,这里主要讲一下控制占位符的格式,比如说输出长度、对齐方式。f-string其实与format()差不多,把变量名写在大括号里的冒号左边即可。可以把控制格式写在大括号里的冒号的右边。原创 2022-12-27 16:06:17 · 2164 阅读 · 1 评论 -
【Python】使用requests库实现多线程下载大文件
1.当我们请求下载文件的时候,可以使用head请求看一下该文件有多大,响应头里的“Content-Length”字段表示文件的字节数。使用使用requests库可以实现网络请求,但如果用于下载大文件,单线程下载确实不能很好地利用宽度,改为多线程会更好一点。2.拿到了文件大小之后,根据线程数划分为多个数据块,即每个线程都请求一部分,在请求头的“Range”字段指定下载范围。5.如果发现其中一个块下载失败了,那就相当于整个文件都失败了,不过我还是希望再尝试下载2次才确定失败。原创 2022-11-25 14:39:32 · 3851 阅读 · 0 评论 -
【Python】Python图形化界面库PySimpleGUI的简单使用
首先要实例化一个Window对象,表示一个界面窗口,但它的构造方法里有几十个参数,我们只指定前两个,分别是窗口标题和窗口布局,布局是一个列表,列表里是各种窗口控件,有了Window对象之后要使用死循环不断调用read()方法,主要作用是监听各种事件,我们通过事件名判断要执行上面代码,如果是关闭窗口则事件名是None,这时候跳出死循环之后调用Window对象的close()方法释放资源,然后程序正常结束就行。Text对象主要用于显示文本,Text对象构造方法的参数很多,但常用的不多。原创 2022-11-13 19:22:42 · 6186 阅读 · 0 评论 -
【python】使用pycryptodome完成RSA非对称加密解密、签名验签
,原来能加密的字符串的长度与公私钥位数有关,max_lengt = (秘钥位数/8 - 11),比如说你的秘钥是1024位,那加密的字符串长度不能超过1024/8 - 11 = 117个。前面的做法是使用公钥加密、私钥解密,但还有一种比较常用的场景是使用私钥加密、公钥解密,这种做法的主要目的是对某些数据生成签名,使用公钥验证签名,判断数据是否被篡改。举个例子,如果我使用rsa1024的密钥,使用sha256算法,那被加密的明文长度最长是62,一旦超过62,那就会报。安装pycryptodome。原创 2022-11-08 17:28:00 · 3289 阅读 · 2 评论 -
【python】多线程下载m3u8分段视频
Windows系统自带的copy命令也可以合并,但是经过我测试,发现合并之后的视频可能会混乱,所以如果视频比较少,可以借助格式工厂等软件合并,如果较多,可以使用Python操作FFmpeg,但我这里没有实现。有些m3u8是加密的,但会在文件里给出秘钥的url,请求一下即可得到秘钥,秘钥一般是一个数字字母组成的字符串。m3u8一般是以m3u8结尾的文件,如果是浏览器,可以按一下F12打开DevTools进行抓包获取m3u8的完整链接,下载之后提取所有视频分段的uri,为了方便操作,我们可以使用m3u8库。原创 2022-10-17 17:23:42 · 2766 阅读 · 0 评论 -
【python】logging日志设置,日志文件过大自动切割文件
1.日志级别python内置了logging模块,我们可以使用它记录自己的日志日志级别:critical > error > warning > info > debug当设置某个级别之后,把它低的不会被记录,例如级别设置为warning,则info和debug则会被丢弃2.logging如果记录要求不高不复杂,可以使用简单易用的loggingimport logginglogging.basicConfig(level=logging.INFO, format='%原创 2022-04-27 17:39:03 · 3190 阅读 · 1 评论 -
【python】Decimal的使用
1.说明python原生数据类型在进行浮点运算时,可能会由于精度问题导致计算结果不准确,尤其是浮点数和较大的数据进行运算,所以如果对数据精度有要求,比如说金额,我们就需要使用decimal这个库2.精度decimal的精度默认是28位,可以自定义,通过getcontext获取线程上下文,然后修改prec属性即可from decimal import Decimal, getcontextprint(getcontext().prec) # 计算精度,默认是28getcontext().pre原创 2022-04-15 18:53:32 · 19665 阅读 · 2 评论 -
【python】使用python在局域网高速分享文件
如果你需要在局域网分享文件,可以使用QQ微信等办公软件挺方便的,但是如果是大文件,比如说好几G的,先不说速度慢,由于限制,还不一定能发给别人但如果你的电脑上安装了python(没有的话也可以自己安装一个,占用资源很小),我们可以使用它自带的http模块运行一个http服务,这样局域网内的设备都能通过浏览器去访问和下载文件了由于走的是局域网路线,所以传输速度基本上取决于你的路由器或交换机的速度。原创 2022-01-14 09:53:28 · 1993 阅读 · 5 评论 -
【python】获取本机局域网ip和公网ip
python3获取本机ip,包括局域网IP和公网IP原创 2022-01-14 09:29:59 · 5117 阅读 · 0 评论 -
【python】SQLite3的简单使用(创建数据库、数据表、增删改查、修改字段)
sqlite是一款轻型的SQL类型数据库,处理速度快且占用资源非常低,所以非常适合存储本地数据,据说处理速度比Mysql、PostgreSQL还快。如果想要修改表结构,可以新建一个表,复制好数据之后再删掉原表,最后重命名为原表,不能先重命名原表再重建同名表,不然会影响外键和索引的。注意,sqlite支持重命名表名和字段名,也支持增加和删除字段,但是不支持修改字段,官方文档里有提到。python3就已经内置了sqlite,所以我们不用额外安装,直接导入即可。Python代码如下。原创 2021-12-15 16:13:03 · 27990 阅读 · 13 评论 -
【python】python2和python3版本并存
1.说明目前基本上都用python3了,但有时候就是会遇到比较老的项目,然后悲催的是你需要python2,很容易破坏当前的python3的环境,其实python2和python3是可以同时安装,而且也很容易设置2.Windows系统先去python官网https://python.org/下载python2和python3的安装包python3尽量选择Windows installer (64-bit)的安装程序,python2可以选择msi的安装程序都下载好之后先安装python3,安装的时候原创 2021-09-10 17:31:32 · 361 阅读 · 0 评论 -
【python】SSH隧道远程连接mysql
1.说明mysql部署在一台服务器上,但不能直接连接该服务器(为了安全),需要通过一台跳板机才能访问,该跳板机是可以通过SSH秘钥访问的。我们可以借助paramiko这个包里面的SSHTunnelForwarder进行连接2.代码import paramikoimport pymysqlfrom sshtunnel import SSHTunnelForwarderdef get_tunnel_ssh(config_dict): private_key = paramiko.RSAK原创 2021-09-09 19:01:06 · 864 阅读 · 0 评论 -
【python】多级菜单列表权限控制
在开发过程中经常遇到多级菜单的情况,比如说导航栏、分类栏等等,甚至可以是无限级菜单。下面是角色的权限控制,根据数据库控制是否可以查看某个菜单1.数据库相关表CREATE TABLE `tb_menus` ( `menu_id` int(11) NOT NULL AUTO_INCREMENT, `menu_name` varchar(200) NOT NULL, `menu_level` int(11) NOT NULL, `superior_menu_id` int(11) NOT N原创 2021-09-02 11:22:35 · 483 阅读 · 0 评论 -
【python】可迭代对象(Iterable)与迭代器(Iterator)
1.迭代器迭代器是一个可以迭代的对象,我们可以通过next()不断取出下一个值,直到抛出StopIteration异常。迭代器的计算是惰性的,只有在需要返回下一个数据时它才会计算。可迭代对象(Iterable)却不一定是迭代器对象(Iterator),这是两个不同的对象,是因为它们实现的方法不一样,后面有说2.迭代方式2.1 判断是否可以迭代from collections.abc import Iterabled = dict()print(isinstance(d, Iterable))原创 2021-08-26 10:13:06 · 1609 阅读 · 0 评论 -
【python】捕获异常、自定义异常
1.说明不管程序写得好不好都有可能遇到异常导致程序终止执行,比如说网络数据库的链接问题等无法控制的外在因素,如果不加以捕获,很难保证程序的正常运行2.捕获异常2.1 异常捕获下面是python最基本的捕获异常的结构import tracebacktry: print("尝试执行代码")except Exception as e: print("遇到错误:{}".format(e)) traceback.print_exc() # 打印跟踪异常栈信息else:原创 2021-08-12 23:25:15 · 713 阅读 · 0 评论 -
【python】使用pillow直接裁剪requests请求的图片(不用先保存文件),Image的简单使用
1.说明有一个业务需求是从网络请求图片,之后对它进行裁剪,网上找了一下决定使用pillow这个库,但网上的写法都是直接打开一个保存在本地的图片文件,经过摸索恍然发现可以借助BytesIO来打开安装pip install pillow2.Image的基本使用from PIL import Imageimg = Image.open("1.jpg") # 打开本地文件img.save("2.jpg") # 保存到本地硬盘print(img.size) # 图片大小print(img原创 2021-07-27 17:27:42 · 698 阅读 · 0 评论 -
【python】pip的使用方法
1.安装模块1.1 在线安装pip install 模块名# 例如pip install requestspip install requests==2.25.1 # 指定模块版本# 卸载模块pip uninstall 模块名如果使用官方默认源感觉安装较慢,或者安装失败,可以考虑换成国内源,设置方法可以参考之前的博客【python】使用pip国内源,解决pip安装速度慢的问题1.2 离线安装有时候需要安装离线文件,比如说tar.gz或whl文件,直接pip install指定该文原创 2021-06-22 15:54:17 · 4556 阅读 · 1 评论 -
【python】paramiko的简单使用
1.封装近期工作中需要从一个服务器上执行某些脚本,所以需要ssh到该服务器执行命令,paramiko就是一个很不错的选择为了方便使用,以下是简单的封装import paramikoclass ParamikoSftp: def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(ParamikoSftp, cls).__new_原创 2021-06-09 15:41:19 · 396 阅读 · 2 评论 -
【python】re正则校验用户密码
1.说明密码很常见,所以密码校验也很常见,比如说注册账户的时候,我们需要对密码的强度进行限制,比如说密码长度、是否包含大小写、不能特殊字符开头等等,我们可以使用正则进行校验2.正则校验1import redef valid_length(pwd, min_=8, max_=16): if min_ <= len(pwd) <= max_: return True, None else: return False, "密码长度应在8到16原创 2021-06-01 11:08:18 · 3487 阅读 · 0 评论 -
【python】使用paramiko上传文件到Linux并且解压
思路是,使用zipfile对文件进行压缩,之后使用paramiko提供的SFTPClient()上传文件,之后使用paramiko的SSHClient()执行Linux命令操作文件import osimport zipfileimport paramiko# 使用zipfile压缩文件def zip_code(dir_name, zip_name): file_list = [] if os.path.isfile(dir_name): file_list.app原创 2021-03-29 19:53:07 · 940 阅读 · 0 评论 -
【python】datetime相关
把时间格式化的时候肯定是需要用到格式化符号的,而Python支持的符号挺多的,下面列举的是比较常用的格式化符号。即距离某个时间点相差多长时间,或者获取某个时间距离时间间隔之后的时间。比如说datetime对象与字符串之间的转换。UTC时间字符串中间带有字母T,例如。,需要转换成时间戳数字,即。原创 2021-03-26 10:50:27 · 408 阅读 · 1 评论 -
【python】使用APScheduler或Django-apscheduler实现定时任务
如果你在启动任务的时候指定了任务ID,可能会出现这种ID冲突的情况,只需要进入数据库找到django_apscheduler_djangojob表,修改ID或者删掉记录即可。之前在Django使用crontab来完成定时任务,还有一个更灵活的python工具APScheduler也可以完成。关于在Django使用crontab实现定时任务可以参考。3)可以对添加的定时任务做持久保存。触发器控制的是什么时候会执行任务。调度器是管理定时任务的。1)可以动态添加任务。在定时任务该执行时,以线程方式执行任务,原创 2020-11-11 18:45:45 · 4758 阅读 · 2 评论 -
【web】JWT(Json web token)的原理、签发、验证
1.JWTJWT(Json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证。后来出现了cookie和session,传统的session认证虽然安全,但是本身很难得到扩展,不方便在多台服务器认证,一般会增大开销,而且还可能会造成CSRF攻击而token认证机制不需要考虑用户在哪一台服务器原创 2020-10-30 15:23:47 · 931 阅读 · 0 评论 -
【测试】Locust的安装、使用、分布式启动、TaskSet、SequentialTaskSet、断言
Locust 是一个纯python实现的可以进行分布式负载测试的工具。实际上它是基于requests库,但是它摒弃进程和线程,采用的是协程(Gevent),大大减少开销,所以它可以在单台压力机上产生数以千计的请求数,比起Jmeter的500上限高了不少1.安装支持3.6及以上版本pip install locust -i https://pypi.tuna.tsinghua.edu.cn/simple2.简单使用from locust import HttpUser, task, between原创 2020-10-28 21:16:08 · 1132 阅读 · 0 评论 -
【测试】pyautogui的安装、鼠标操作、键盘操作、交互弹窗、截图定位
1.pyautoguipyautogui是用来做GUI桌面应用自动化的Python包,功能类似于按键精灵,可以实现控制鼠标、键盘、消息框、截图、定位功能,支持跨平台。不过也有缺点,比如说不支持中文输入(一般配合pyperclip解决此问题)2.安装# Windowspip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple# Macpip install pyobjc-corepip install pyobjcpip原创 2020-10-27 19:16:28 · 2214 阅读 · 2 评论 -
【测试】appium的基本使用,配置环境、元素定位、简单使用、切换上下文
1.安装和配置环境1.1 安装jdkjdk官网下载https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html配置环境变量添加变量JAVA_HOME=D:\Program Files\Java\jdk\jdk1.8.0_151(换成自己的路径)在Path添加%JAVA_HOME%\bin1.2 安装SDKAndroid SDK官网下载http://dl.google.com/android/and原创 2020-10-27 11:22:37 · 741 阅读 · 0 评论 -
【测试】Selenium的使用(常用属性方法、元素等待、操作cookie、操作元素、无头模式、获取HTML源码)
1.SeleniumSelenium是一个用于Web应用程序测试的工具,可以使用代码控制浏览器,所以一般可以用于测试、爬虫等方向免费开源跨平台,支持Linux、Win、Mac等支持多种浏览器,Chrome、Firefox、Edge等支持python、Java、C#、js等多种语言2.WebDriverSelenium不能直接控制浏览器,得经过webdriver才能与预览器交互,即webdriver是两者之间的桥梁。所以我们需要先下载webdriverChrom浏览器(chromedriv原创 2020-10-25 11:30:55 · 2236 阅读 · 0 评论 -
【python】yaml文件的读写
我们用到更多的是json格式的读写,但是有时候需要用到yaml格式,故进行记录1.yamlYAML(发音/ˈjæməl/)是一个可读性高,用来表达数据序列化的格式,使用它可以简单表达列表、字典、标量等资料形式语法规则1)大小写敏感2)使用缩进表示层级关系3)缩进时不允许使用tab键,只允许使用空格4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可支持的数据结构1)字典: 键值对的集合2)数组: 一组按照次序排列的值, 又称序列(sequence)、列表3)纯量: 单个的、不可再分原创 2020-10-22 18:31:47 · 2037 阅读 · 0 评论 -
【测试】Pytest框架、断言、fixture、mark、配置文件、常用插件
1.PytestPytest 是一个很强大的python测试框架,里面有很多优秀的册数类,可以满足python开发中的各种测试,比如说可以标记跳过一些测试、支持重复失败的测试、支持断言等。不过它并非python内置,所以我们得另外安装 pip install -U pytest -i https://pypi.tuna.tsinghua.edu.cn/simpleimport pytestimport requestsdef test_one(): r = requests.get(原创 2020-10-22 18:00:29 · 574 阅读 · 0 评论 -
【测试】unittest单元测试、assert断言、parameterized参数化、mock替代
1. unittest基本概念1.1 unittestunittest是python官方提供的测试框架,可以同时执行多个测试用例,还有丰富的测试结果展示。下面是执行过程1.2 TestCaseTestCase(测试用例)就是一个完整的测试流程,我们称之为一个测试用例import unittest# 1.继承unittest.TestCase # 2.测试用例名要以test开头class MyTest(unittest.TestCase): def test_demo1(self)原创 2020-10-20 14:06:36 · 1101 阅读 · 1 评论 -
【爬虫】使用requests下载文件,实现下载大文件断点续传
requests是一个很棒的HTTP协议请求工具,我们可以用它写爬虫或做测试,关于该库的用法可以参考之前的文章这篇文章主要记录一下使用requests下载文件的方法。原创 2020-10-18 21:57:57 · 10862 阅读 · 2 评论 -
【爬虫】requests请求方式、Response、Session
1.requests该库可以发起http协议的请求,比python原生的urllib更加方便,所以经常会用在爬虫、测试等方向1.1 安装pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple1.2 请求方式请求方式包括,get、post、put、patch、delete、options、header。使用的时候可以requests.方法名(),例如requests.get()发起GET请求。当然,也可以使用request(原创 2020-10-18 20:12:09 · 2048 阅读 · 0 评论 -
【Django】使用pickle、base64编码解码数据
如果返回给前端的数据如果很重要,我们可以使用itsdangerous等进行加密传输。但并不是很敏感,我们可以使用简单的编码不让它直接显示明文,比如说用pickle序列化成字节,再使用base64编码成一个可视化的字符串1.编码和解码pickle编码解码只需要调用dumps()和loads()方法即可,base64编码解码只需要调用b64encode()和b64decode()即可需要注意的是,编码得到的数据是字节类型的import pickle,base64data = {"name":"pan原创 2020-09-11 20:01:55 · 1029 阅读 · 0 评论 -
【Django】使用itsdangerous加密json数据生成token
有时候我们需要把一些信息传给前端,之后前端再传回来,若是遇到敏感信息就会被暴露,所以我们需要把它加密成一个token,待前端传回来的时候再进行解密。我们可以使用itsdangerous这个模块进行加密和解密操作1.安装itsdangerouspip install itsdangerous2.简单使用其实itsdangerous的用法有多种,我们这里只用给JSON加解密的方法,需要用到TimedJSONWebSignatureSerializer类的dumps()和loads()方法from i原创 2020-09-11 14:25:54 · 702 阅读 · 0 评论