python
文章平均质量分 67
酷python
微信公众号: coolpython
展开
-
python怎么做类型标注
文章目录1. 为变量做类型标注1.1 简单的数据类型1.2 使用 Optional1.3 使用Union1.4 为容器类型做标注1.4.1 为集合做标注1.4.2 为列表做标注1.4.3 为元组做标注1.4.4 为字典做标注1.4.5 容器类型标注总结2. 为函数做标注类型2.1 对形参和返回值进行标注2.1 对可变参数进行标注2.3 callable对象做参数3. 标注自定义类3.1 自定义类实例3.2 标注类属性4. 不常见的类型标注4.1 迭代器4.2 字典的items(), keys(), valu原创 2021-09-22 11:18:37 · 4762 阅读 · 1 评论 -
闲聊flask web编程中的cookie
在web编程中,cookie和session的区别于联系并不是一个很容易搞清楚的事情。在我从事后端工作的很长时间里,对于他们的应用也并不多,因为大多数时间都是在编写API接口供其他系统调用,而cookie与session恰恰是一项只和终端用户联系紧密的技术。1. http协议无状态在尝试搞清楚cookie之前,你首先接受并理解一个事实,http协议是一个无状态的协议。所谓的无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,这意味着每个请求都是独立的。这样的无状态会产生什么问题呢?假原创 2021-09-03 14:32:06 · 286 阅读 · 0 评论 -
python计算大文件的hash值,为什么要分块读取数据
import ioimport hashlibdef read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): """Yield pieces of data from a file-like object until EOF.""" while True: chunk = file.read(size) if not chunk: break yield chunkd原创 2021-08-26 15:32:07 · 1365 阅读 · 0 评论 -
pip---判断path对于当前用户是不是可写的
1. 代码片段def check_path_owner(path): # type: (str) -> bool # If we don't have a way to check the effective uid of this process, then # we'll just assume that we own the directory. if sys.platform == "win32" or not hasattr(os, "geteuid"):原创 2021-08-23 10:26:10 · 224 阅读 · 0 评论 -
下载文件时,浏览器是怎么知道文件名称的?
当你在浏览器里下载一个文件时,浏览器是如何知道你所下载的文件的名称的呢?这或许是你从未考虑过的事情,但浏览器必须知道,否则,它就不知道如何保存文件。1. Content-Disposition 首部如果能在在http 响应头中找到一个content-disposition 首部,那么就根据这个首部里的内容来确定所下载文件的名称,通常它的格式是这样的Content-Disposition: attachment; filename=filename.jpgattachment表示附件,filena.原创 2021-08-13 17:19:44 · 1238 阅读 · 0 评论 -
python读写csv文件的正确方式
1. 读取csv文件准备数据data.csvname,age小明,14小刚,15通常,我们用下面的代码读取csvimport csvwith open(r'C:\Users\zhangdongsheng\Desktop\data.csv', encoding='utf-8')as f: reader = csv.reader(f) headers = next(reader) print(headers) for row in reader: .原创 2021-08-10 09:10:11 · 831 阅读 · 0 评论 -
python读取csv文件的正确方式
准备数据name,age小明,14小刚,15通常,我们用下面的代码读取csvimport csvwith open(r'C:\Users\zhangdongsheng\Desktop\data.csv', encoding='utf-8')as f: reader = csv.reader(f) headers = next(reader) print(headers) for row in reader: print(row)程序输出结果原创 2021-08-09 17:31:32 · 817 阅读 · 1 评论 -
python的split函数切分字符串时为什么会产生空字符串
群里的一个小伙伴提了一个问题,他使用split函数切分字符串得到的结果里有空字符串,他对空字符串的出现感到困惑不解。text = '1aa2'print(text.split('a')) # ['1', '', '2']这个空字符串是如何产生的呢?以a为分隔符切分时,我们认为两个a之间有一个空字符串,因此产生一个空字符串。感觉很奇怪,但是很合理。如果不这样处理,那么结果就变成了 [‘1’, ‘2’],符合你的直觉,但这回导致一个尴尬的情况text = '1aa2'print(tex原创 2021-08-05 10:12:21 · 1922 阅读 · 0 评论 -
一张图学会python递归函数
递归函数属于那种“难者不会,会者不难”的事情,回想自己大学时学习递归函数的经历,简直是痛不欲生,代码里没有一行是看不懂的,但就是理解不了它是怎样运行的。 等到自己悟通了原理,就又会觉得这东西太简单了,不明白自己当初为何想不清楚。对于递归函数,你就把握以下几点:在函数内调用函数自身,和调用其他函数没有区别,反正都是函数递归函数存在条件,在这个条件下必须return,否则递归就成了死循环最后一条,也是容易出错的地方,函数多次递归调用,形成了一个多层次的调用关系,函数return 时,是从最底层开始逐层原创 2021-08-03 19:51:26 · 1156 阅读 · 1 评论 -
flask_migrate---处理 sqlalchemy 数据迁移的工具
1. 什么是flask_migrateflask_migrate 是专门用来做sqlalchemy 数据迁移的工具,当据模型发生变化的时可将修改后的模型重新映射到数据库中,这意味着数据库也将被修改。本文介绍flask_migrate如何在flask项目中使用,所依赖的第三方库和版本信息如下pip install flask==1.1.4pip install flask-script==2.0.6pip install flask_migrate==2.7.0pip install sqlalc原创 2021-07-28 19:39:35 · 422 阅读 · 0 评论 -
使用python的tempfile模块创建临时文件
什么样的情况下需要我创建临时文件呢?我很早就知道tempfile这个模块,但一直没有使用过它,也没有兴趣去研究它,一度认为自己用不到这个模块。存在即合理,合理的才能存在,想来是我不够虚心,才没有看到这个模块的应用价值。1. 临时文件目录在linux系统下有一个/tmp 目录,这个目录下存储的都是些临时文件,创建这些临时文件的可能是操作系统,也可能是你安装的某个软件系统,比如hadoop,你自己写的程序也可以对这里的文件进行读写操作。临时文件目录下的文件夹和文件,会被定期清理,默认是30天。这就要求/t原创 2021-07-27 11:39:36 · 303 阅读 · 0 评论 -
一文看懂python的迭代器和可迭代对象
阅读完本文,你将收获以下知识点:什么是迭代器和可迭代对象,他们之间有什么关系迭代器可以迭代的底层原理是什么如何自定义可迭代对象和迭代器迭代器和可迭代对象是两个非常难以搞懂的python概念,我试图用最轻松的方式为你揭开它们的神秘面纱,你也将在这个过程中学习到研究技术的方法。1. 判断一个对象是不是可迭代对象,是不是迭代器我研究的思路,第一步先找到一种办法,可以判断一个对象是不是可迭代对象,是不是迭代器。如果我掌握了这种方法,那么我就可以用它来识别哪些是可迭代对象,哪些是迭代器,这样做非常关原创 2021-07-23 16:33:37 · 266 阅读 · 2 评论 -
python判断一个进程是否存在的3种方法
在python中,如何判断一个进程是否存在呢?可以使用Popen执行shell命令判断进程是否存在,或者检查/proc 目录下是否存在进程相对应的目录,最佳的方法是向进程发送信号0, 下面分别介绍1. Popen使用subprocess模块的Popen执行shell 命令,ps -ef | grep 126055 会筛选出进程执行命令中带有126055 的进程信息。import subprocesspid = 126055p = subprocess.Popen('ps -ef | grep.原创 2021-07-22 10:11:14 · 4221 阅读 · 1 评论 -
从python列表里删除一个元素会对reversed() 产生怎样的影响
这是一个在stackoverflow上看到的问题,非常的有趣且值得研究。1. iter使用iter函数返回列表的迭代器,随后从列表里删除一个元素,在遍历迭代器时,输出的内容会是怎样的呢?lst = ['a', 'b', 'c', 'd']iter_lst = iter(lst)lst.remove('c')print(list(iter_lst))考虑2分钟,想一想print函数会输出什么呢?答案是['a', 'b', 'd']从列表里删除元素c并不影响迭代器的使用,这也揭示了迭代器的原创 2021-07-21 10:45:18 · 140 阅读 · 0 评论 -
用python实现一个自动保存复制图片的功能
由于经常写作,需要为文章准备一些配图,通常这些配图是从百度图片搜索里准备的。在准备图片时,我遇到了两个小麻烦:有些图片的格式是webp,需要在另存为时指定格式有些图片需要剪切,剪切后不能直接复制到桌面,我总是先复制到qq聊天窗口,然后另存为,步骤繁琐有没有什么办法能让我轻松的获得复制的图片呢?经过一番思索,我研究出一个方案:让程序每隔一秒钟监听一次剪贴板,如果剪贴板里是图片,就保存到指定文件夹里,这样,在复制图片1秒钟后程序就自动的帮我把图片保存下来。说干就干。1. 验证可行性首先,我需要原创 2021-07-16 11:43:34 · 978 阅读 · 3 评论 -
从零开始写一个推荐系统第二篇,推荐电影
1. 准备数据上一篇文章讲解了两种计算相似度的方法,理论部分就已经准备完毕了。实践部分,考验的是你的工程能力。首先,我们需要准备一份数据,这份数据我们没办法自己去造,自己造的数据不真实,没有实践的意义。可供与实战的数据有很多,很多研究机构和大学都会公开实验的数据,本文选择使用ml-100k数据集,它是一份电影评分的数据集,我这里提供一份百度网盘的下载地址: https://pan.baidu.com/s/1KWe7gmsFoEHvDd0W762fcA 提取码:6skh下载后解压,找到u.data文件,原创 2021-07-13 10:04:11 · 641 阅读 · 2 评论 -
从零开始写一个推荐系统第一篇,谁和你相似
1. 谁和你相似我们在电商网站上购买一件商品后,网站总是会提醒我们,购买这件商品的用户还购买了哪些商品,网站会猜出你可能会购买的商品。网易云音乐有一个每日推荐功能,会根据你的个人喜好为你推荐一批歌曲。这些推荐并不是随机的,而是经过一系列复杂的计算生成的。网站背后的算法是非常复杂的,但可以总结为一个简单的目标:找到和你相似的人,把这个人喜欢的东西推荐给你。那么谁和你相似呢?这又是一个复杂的问题,为了找到和你相似的人,必须将人的行为进行量化,所谓量化,就是用数学来描述人的行为。假设有4部电影,分别是霸王别原创 2021-07-09 11:44:18 · 283 阅读 · 0 评论 -
zodb,一个python对象数据库
1. 什么是对象数据库关系型数据库,是指采用了关系模型来组织数据的数据库,以行和列的形式存储数据库,典型如mysql。NoSQL数据库,是指非关系型数据库,典型如mongodb。对象数据库,是一种以对象形式表示信息的数据库,对于关系型数据库,你必须事先定义一张表,在写入数据时,必须通过sql语句按照表的定义写入字段值;对于NoSQL数据库,已经没有了表的概念,你实现不需要做任何定义,可以将python字典直接写入mongodb,每次写入的字典里,key的数量和内容都可以不同, NoSQL在操作上已经方原创 2021-07-08 17:33:57 · 391 阅读 · 0 评论 -
将docker容器作为进程来使用
1. 容器只是一个进程使用docker部署一个mysql服务,或者一个nginx服务,这些服务是持久存在的,加上环境的隔离特性,我一直都将docker容器的使用限定在容器这个范围内。在容器内,启动某个程序对外提供服务。但本质上,容器相对于宿主机,不过是一个进程而已。用进程的视角去看待它,我突然有了一个想法,或许早已经有人在这样做,或许我的这个思路存在一些问题,如果你对此有自己的经验和看法,欢迎你能够与我交换意见。我的想法很简单,对于一些任务,或者一些命令,如果执行他们需要特定的环境,那么就可以将这个环原创 2021-07-08 17:33:11 · 454 阅读 · 0 评论 -
用python制作一个简单的zip压缩工具
1. 功能设计对文件或文件夹压缩,是日常工作中经常要做的事情,市面上也有非常多的压缩工具,在linux系统里,有zip, tar等命令可以用于压缩。最近学习了python的zipfile模块,它提供了通用的创建,读取,写入压缩文件的方法,使用方法非常简单,我尝试使用tkinter 写一个简单的压缩小工具。界面这块,需要一个文件选择框,一个文件选择按钮,一个压缩按钮和一个label用于显示压缩过程中被压缩的文件。功能方面,不提供对压缩文件命名的能力,只对文件夹进行压缩,压缩后的文件保存在和被压缩文件夹同原创 2021-06-30 11:20:01 · 757 阅读 · 1 评论 -
使用pyfakefs在内存中创建文件,而非硬盘
pyfakefs 是一个假文件系统,它模拟的是python的文件系统,简单来说,它提供了和python的os模块,Path模块一样的功能,所有的文件操作,例如创建,修改,删除,重命名等操作都是在内存中进行的。做出一个假的文件系统,有什么用处呢,我最开始看到这个模块的介绍时,心中是一样的疑问,直至看到它的示例,才明白它的奥妙之处。我们在编写python模块时,如果这个模块的功能是和文件操作有关的,比如遍历某个文件夹,移动一些文件到另一个文件夹,如果你想做单元测试,就必须准备这些文件,麻烦的是随着测试的进行,原创 2021-06-25 17:15:13 · 554 阅读 · 0 评论 -
解密python虚拟环境是如何创建的
python虚拟环境,允许你在同一台机器上部署不同版本的python项目,即便是同一个python版本的项目,其依赖的第三方库也可以不同。在python2.7时代,实现虚拟环境最流行的库是virtualenv, 进入到python3时代后,内置了venv来支持虚拟环境的创建,此外,conda也可以非常方便的管理虚拟环境。那么,你是否好奇过,虚拟环境是如何实现的,不同的环境之间究竟是如何做到隔离的,进入虚拟环境后,在shell命令行的最前端,还是显示虚拟环境的名称,这又是怎么实现的?带着这些疑问,本文以v原创 2021-06-24 17:30:21 · 257 阅读 · 0 评论 -
在python代码中,写其他编程语言的hello world
1. hello world不论哪种编程语言,在你最开始学习时,都会给你一个在终端输出hello world的示例print("hello world")这已经成为一种惯例,最近在github上闲逛时,偶遇了一个特别有趣的项目,这个作者实现了一个模块,可以让你在python代码里,使用其他编程语言的语法和关键字来编写hello world , 就像下面这样import anyprintprintf("printf %d\n", 10) # cfmt.Println("hello原创 2021-06-23 15:27:32 · 362 阅读 · 1 评论 -
掌握hashtable,深度理解python字典的数据结构
文章目录1. hash函数2. hashtable2.1 链地址法实现hashtable2.2 解决冲突2.3 开放寻址法实现hashtable2.4 逻辑删除key3. python的字典字典在python中几乎无处不在,它性能强劲,而且可靠,这源于底层的数据结构—hashtable。本文将向你介绍hashtable这种数据结构,你将学习掌握到以下知识点:hash函数hashtable数据结构python字典顺序写入1. hash函数在学习hashtable之前,首先需要掌握hash函数,原创 2021-06-10 09:28:50 · 419 阅读 · 2 评论 -
忘掉python的os.path吧,pathlib巨好用
1. pathlib 取代os.path模块从python3.4开始,pathlib正式成为标准库,旨在取代老旧的os.path模块和一些os模块中对系统路径的操作。pathlib提供了表示文件系统路径的类,而os.path提供的是各种操作路径的函数,如果你已经熟练的掌握了os.path,那么学习pathlib将非常容易。从使用情况来看,pathlib的功能对编程人员更加友好,对系统路径的操作更便捷。2. 纯路径与具体路径下图是pathlib所提供的类的继承关系纯路径与具体路径的区别在于,具体路原创 2021-06-09 15:50:11 · 191 阅读 · 0 评论 -
用python为网站画一张用户分布地图
我的个人博客网站coolpython.net上线已经有将近两年的时间了,一直都想画一张用户分布的地图,今天终于完成了,效果图如下本文记录下地图的制作过程1. 第一步,提取用户ip我的网站是用python编写的,使用uwsgi部署,会产生一个名为uwsgi.log的日志文件,记录的内容如下[pid: 4758|app: 0|req: 62019/129930] 113.110.227.224 () {42 vars in 930 bytes} [Mon Jun 7 16:21:15 2021] G原创 2021-06-08 18:08:54 · 708 阅读 · 4 评论 -
python web框架多进程部署下数据库连接问题
python常用的web框架,诸如flask,django,在生产部署时,都会选择多进程的部署方式,选用的中间件多为uwsgi或者gunicorn。如果项目里使用了数据库,那么就要考虑数据库连接在多进程下的一些问题,本文以mysql数据库为例。1. 多进程下共用数据库连接python连接mysql的客户端驱动库有很多种,例如pymysql,它们都提供了数据库连接池,连接池是多线程安全的,多进程下并不安全。多线程的安全,是通过线程锁解决的,这非常容易做到,而多进程加锁则并不容易。我所谓的多进程,是由原创 2021-03-16 20:17:35 · 588 阅读 · 4 评论 -
认识flask蓝图 blueprint
1. 一个最小的应用flask教程都喜欢用一个非常小的应用示例向你展示flask的小巧灵活,例如下面的这个应用from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run(port=5678)真正的flask应用,绝不可能是如此的短小,而是划分许多模块,要提供很多原创 2021-03-16 20:16:48 · 123 阅读 · 0 评论 -
python使用正则表达式实现字符串替换
python的字符串提供了replace方法,可以将子串替换成其他字符串,例如下面的代码name= 'flask_script'name = name.replace('_', '-')print(name) # flask-script替换的前提是清楚的知道哪些字符串需要被替换,如果规则模糊了,replace方法就不奏效了,比如下面的字符串name = 'fla346s35k_sc32ript'现在要求你将字符串里的所有数字都去掉,使用replace就非常困难了,这种情况下,可以求原创 2021-03-16 20:16:00 · 18139 阅读 · 0 评论 -
有关python包名的规范
你可以自己做一个实验,执行下面的命令安装一个第三方库 pip isntall flask-script安装好以后,使用pip show flask-script 命令可以查看这个库的具体信息Name: Flask-ScriptVersion: 2.0.6Summary: Scripting support for FlaskHome-page: http://github.com/smurfix/flask-scriptAuthor: Dan JacobAuthor-email: dan原创 2021-03-16 20:15:32 · 740 阅读 · 0 评论 -
pip是如何卸载你安装的第三方库的
使用pip uninstall 命令可以卸载掉你所安装的第三方库,所有与其相关的文件都将被pip整理出来展示并询问是否真的要删除,类似下面的提示pip uninstall noxFound existing installation: nox 2020.8.22Uninstalling nox-2020.8.22: Would remove: d:\python\lib\site-packages\nox-2020.8.22.dist-info\* d:\python\lib\si原创 2021-03-16 20:14:47 · 2619 阅读 · 0 评论 -
可能是史上最优质的python基础教程
一份好的python基础教程应该满足以下要求:内容编排循序渐进,有主线,有理论,有经验分享 概念讲解专业且准确,深入浅出,配合示例代码,理解更直观 每个章节都配有练习题,巩固所学,以免遗忘 内容详实,可作为基础部分的工具书查询使用 针对0基础同学,重点讲解令他们疑惑不解的知识然而,我们在网络上能够找到这样的教程么,显然找不到虽然国内掀起了学习python的浪潮,但可以找到的教程却...原创 2020-01-02 22:27:52 · 463 阅读 · 0 评论 -
以专业视角推荐python教程《python编程快速上手---让繁琐工作自动化》
本篇文章从专业视角点评推荐《python编程快速上手---让繁琐工作自动化》1、适合哪些人学习如果你在工作中,经常与word文档,execl打交道,而且有大量重复性工作,那么这个教程非常适合你,在实践中应用python,正是这本书的特色。如果你的工作需要经常从web网上摘取信息,那么你可以学习第11章---从web抓取信息,如果你经常处理大量的excel文件,而所做的工作又仅仅是粘贴复...原创 2019-11-19 17:44:05 · 267 阅读 · 0 评论 -
每个python初学者都会犯的变量命名错误
关于python的命名规范,我后续会专门写一篇文章,本文只讨论初学者都会犯的一个变量命名错误,避免这个错误,就可以避免很多稀奇古怪的问题1、变量命名要避开python内置函数名称初学python,你还不习惯给变量起名字,刚刚接触了几个单词,于是给变量起名字的时候就用上了,不仅如此,你还以为这样命名很好的表达了这个变量的用途,比如下面的变量命名方式str = "这是字符串"list ...原创 2019-11-06 17:47:00 · 2172 阅读 · 0 评论 -
Python操作Redis之Incr
传统数据库,如果想实现一个计数,比如记录一篇文章的访问次数,当有新的访问到来时,先要去数据库中查询这篇文章的访问量,然后加1,最后重新写入数据库,在这个过程中,如果有并发就可能导致计数错误,所以,更新文章访问量的代码都是需要加锁的,以防止同时修改。Redis的所有操作都是原子性的,也就是说,不论多少个客户端在对一个key进行操作,你不必担心并发导致的类似错误,因为Redis在实现上已经对这类问原创 2015-09-26 10:03:49 · 7600 阅读 · 0 评论 -
Python操作Redis之mset和mget
虽然有set和get操作,但是一个一个的操作终究还是麻烦,所以,我们还有mset和mget命令python在进行mset操作时,只需要传入一个dict即可,进行mget操作,则传入一个list看代码# coding=utf-8'''Created on 2015-9-8@author: kwsy'''import redisimport datetimeimport t原创 2015-10-16 21:54:53 · 13639 阅读 · 0 评论 -
Python操作Redis之设置key的过期时间
对于一个已经存在的key,我们可以设置其过期时间,到了那个时间后,当你再去访问时,key就不存在了有两种方式可以设置过期时间,一种是指定key从当前时间开始算起还能存活多久,时间单位有两个,一个是秒,一个是毫秒第二种方式是指定key在某一个时间失效,这需要指定明确的年月日时分秒,如果你指定的这个时间已经早于当前时间,那么这个key会立即失效现在,我们现在redis中添加两个key,分别原创 2015-10-08 10:35:17 · 29868 阅读 · 0 评论 -
Python操作Redis之订阅与发布
订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量。订阅者只能收到自它开始订阅后发布者所发布的消息,之前发布的消息呢,就不可能收到了。下面,先给出订阅端的代码# coding=utf-8'''Created on 2015-9-9@author: kwsy'''import原创 2015-10-22 16:08:09 · 11034 阅读 · 0 评论 -
python操作redis之连接reids
作为python操作redis系列的第一篇,有必要介绍一下如何安装和使用redis鉴于网上已经有很多安装教程,这里只给出一个教程的连接地址 linux下安装redis 在Terminal中输入redis-server并回车 即可启动redis服务 另打开一个Terminal,输入redis-cli并回车,打开reids客户端 下面是相关的配置li原创 2015-09-18 16:10:18 · 1190 阅读 · 0 评论 -
Python操作Redis之散列类型
如果一个程序猿不懂散列,你基本上可以认为,他不懂算法。redis的散列类型能为我们做什么呢?上例子吧,理论都是苍白的# coding=utf-8'''Created on 2015-9-12@author: Administrator'''import redispool=redis.ConnectionPool(host='192.168.1.105',port=6379,原创 2015-11-11 14:08:01 · 1056 阅读 · 0 评论