前言:
不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行。
这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自己想做的项目进行参考学习练手,你也可以从中寻找灵感去做自己的项目。
1、【Python 图片转字符画】
2、【200行Python代码实现2048】
3、【Python3 实现火车票查询工具】
4、【高德API+Python解决租房问题 】
5、【Python3 色情图片识别】
6、【Python 破解验证码】
7、【Python实现简单的Web服务器】
8、【pygame开发打飞机 游戏 】
9、【Django 搭建简易博客】
10、【Python基于共现提取《釜山行》人物关系】
11、【基于scrapy爬虫的天气数据采集(python)】
12、【Flask 开发轻博客】
13、【Python3 图片隐写术】
14、【Python 实现简易 Shell】
15、【使用 Python 解数学方程】
16、【PyQt 实现简易浏览器】
17、【神经网络实现手写字符识别系统 】
18、【Python 实现简单画板】
19、【Python实现3D建模工具】
20、【NBA常规赛结果预测——利用Python进行比赛数据分析】
21、【神经网络实现人脸识别任务】
22、【Python文本解析器】
23、【Python3 &OpenCV 视频转字符动画】
24、【Python3 实现淘女郎照片爬虫 】
25、【Python3实现简单的FTP认证服务器】
26、【基于 Flask 与 MySQL 实现番剧推荐系统】
27、【Python 实现端口扫描器】
28、【使用 Python 3 编写系列实用脚本】
29、【Python 实现康威生命 游戏 】
30、【川普撞脸希拉里(基于 OpenCV 的面部特征交换) 】
31、【Python 3 实现 Markdown 解析器】
32、【Python 气象数据分析 -- 《Python 数据分析实战》】
33、【Python实现键值数据库】
34、【k-近邻算法实现手写数字识别系统】
35、【ebay在线拍卖数据分析】
36、【Python 实现英文新闻摘要自动提取 】
37、【Python实现简易局域网视频聊天工具】
38、【基于 Flask 及爬虫实现微信 娱乐 机器人】
39、【Python实现Python解释器】
40、【Python3基于Scapy实现DDos】
41、【Python 实现密码强度检测器】
42、【使用 Python 实现深度神经网络】
43、【Python实现从excel读取数据并绘制成精美图像】
44、【人机对战初体验:Python基于Pygame实现四子棋 游戏 】
45、【Python3 实现可控制肉鸡的反向Shell】
46、【Python打造漏洞扫描器 】
47、【Python应用马尔可夫链算法实现随机文本生成】
48、【数独 游戏 的Python实现与破解】
49、【使用Python定制词云】
50、【Python开发简单计算器】
51、【Python 实现 FTP 弱口令扫描器】
52、【Python实现Huffman编码解压缩文件】
53、【Python实现Zip文件的暴力破解 】
54、【Python3 智能裁切图片】
55、【Python实现网站模拟登陆】
56、【给Python3爬虫做一个界面.妹子图网实战】
57、【Python 3 实现图片转彩色字符】
58、【自联想器的 Python 实现】
59、【Python 实现简单滤镜】
60、【Flask 实现简单聊天室】
61、【基于PyQt5 实现地图中定位相片拍摄位置】
62、【Python实现模板引擎】
63、【Python实现遗传算法求解n-queens问题】
64、【Python3 实现命令行动态进度条】
65、【Python 获取挂号信息并邮件通知】
66、【Python实现java web项目远端自动化更新部署】
67、【使用 Python3 编写 Github 自动周报生成器】
68、【使用 Python 生成分形图片】
69、【Python 实现 Redis 异步客户端】
70、【Python 实现中文错别字高亮系统】
最后:
以上项目列表希望可以给你在Python学习中带来帮助~
获取方式:转发 私信“1”
一般学习会Python可以往很多方向发展,比如说:1、web应用开发:在国内,很多知名的网站都开始使用Python,比如说豆瓣、知乎,都是使用Python作为web开发基础语言的,知乎整体框架也是基于Python语言的,因此web开发领域在国内发展是非常不错的。YouTube国外的视频网站,都使用Python开发的。
2、网络爬虫:爬虫算是Python应用比较多的一个场景吧,谷歌的蜘蛛就是用Python撰写的,Requests
,这个库是一个模拟HTTP请求的一个库,相信学习过Python的人对于它都是比较熟悉的,抓住数据之后数据分析以及计算领域也是Python的应用领域,具有很大的作用。目前Python比较流行的网络爬虫框架是功能非常强大的scrapy。
3、人工智能、机器学习:随着人工智能的火爆,各种培训班也开设了Python培训的课程,尤其是深度学习,其工具框架大都提供了Python接口。Python在科学领域一直有着很好的作用,简洁清晰的语法以及丰富的计算工具,受到了该领域开发者的喜欢。所以说Python简单易学框架丰富,很多对于Python都是非常友好的。
4、数据分析:在大量数据的基础上,结合科学计算、机器学习等技术,对数据进行清洗、去重、规格化和针对性的分析是大数据行业的基石。Python是数据分析的主流语言之一。
每次开始一个新的 Python 项目,我都会为怎么管理配置文件而头疼。不过在迁移我的博客时,终于有空花了点时间,把这件事想清楚。一年多的时间过去了,一切似乎都很顺利,连我在知乎所做的新项目也沿用了该方案,于是决定把解决方案记录下来。
先说说我要解决什么哪些Python项目的配置管理问题吧:
可以区分各种环境。
在开发、测试和生产等环境,都可能用到不同的配置,所以能区分它们是一个很基本的需求。
可以有通用的配置项。
各种环境的配置中,需要修改的只占一小部分。因此通用的部分应该不需要重复定义,否则会带来维护成本。
可以分成多个部分/模块。
随着Python项目的配置管理项的增多,找起配置来会花大量时间,所以划分它们对维护配置很有帮助。
可以直接使用 Python 代码。
从文本文件中解析出变量值太麻烦,而且不方便生成批量的数据(例如数组),也不好通过函数调用来生成配置值(例如获取文件路径)。
可以将公开和私有的配置文件分开管理。
在开源项目中,应只包含公开的配置项,而不包含私有的配置。不过这个需求对私有项目而言,没什么意义。
工作中我先后使用了几种Python项目的配置管理方式,主要使用的就两种:
为每个环境分别写一个配置文件,到相应的环境里,将该环境的配置文件软链接到正确的路径。
如何进行python项目配置管理?使用分布式的配置服务,从远程获取配置。
前者用起来其实蛮麻烦的,特别是想在本地跑单元测试时,需要替换成单元测试环境的配置文件。所以我又把环境变量给加了进来,检测到指定的环境变量,就加载单元测试的配置。而其他几个需求也能勉强实现,不过并不优雅。
后者不能直接使用 Python 代码,网络不好时需要降级成使用本地缓存,获取配置服务器的地址需要配置,配置服务器自己也需要配置,而且配置服务器还可能挂掉(知乎内网遇到过全部五台配置服务器都挂掉的情况),所以我用得比较少。
其实仔细想想就能发现,「使用 Python 代码」也就意味着是 Python 源文件,「有通用的配置项」用 Python 实现就是继承,似乎没更好的选择了。
如何进行python项目配置管理?于是定义一个 Config 类,让其他环境的配置都继承这个类:
# config/default.pyclass Config(object):
DEBUG_MODE = True
PORT = 12345
COOKIE_SECRET = 'default'
REDIS_CONFIG = {'host': 'localhost', 'port': 6379, 'db': 0} # ...
# config/development.pyfrom .default import Configclass DevelopmentConfig(Config):
COOKIE_SECRET = 'dev'
# config/unit_testing.pyfrom .default import Configclass UnitTestingConfig(Config):
REDIS_CONFIG = {'host': 'localhost', 'port': 6379, 'db': 1}
# config/production.pyfrom .default import Configclass ProductionConfig(Config):
COOKIE_SECRET = '...'
REDIS_CONFIG = {'unix_socket_path': '/tmp/redis.sock'}
为了让每种环境都只有一个配置生效,还需要加一个策略:[page]
# config/__init__.pyimport loggingimport os
env = os.getenv('ENV') # 可以改成其他名字,自己进行设置try: if env == 'PRODUCTION': from .production import
ProductionConfig as CONFIG
logging.info('Production config loaded.') elif env == 'TESTING': from .testing import TestingConfig as CONFIG
logging.info('Testing config loaded.') elif env == 'UNIT_TESTING': from .unit_testing import UnitTestingConfig as
CONFIG
logging.info('Unit testing config loaded.') else: # 默认使用本地开发环境的配置,省去设置环境变量的环节
from .development import DevelopmentConfig as CONFIG
logging.info('Development config loaded.')except ImportError:
logging.warning('Loading config for %s environment failed, use default config instead.', env or 'unspecified')
from .default import Config as CONFIG
这样只需要在跑应用前,设置不同的环境变量即可。如果是用 Supervisor 维护进程的话,加上一行environment = ENV="PRODUCTION"配置即可。
当然还可以加其他的规则,例如没环境变量时,再检查机器名等。
如何进行python项目配置管理?现在前两个需求都解决了,再来看分模块的功能。
这个需求正好对应 Python 的 package,于是把每个Python项目的配置管理文件改成一个 package 即可。接着是如何同时满足第二和第三个需求。
举例来说,有这样的配置:
# config/default.pyclass Config(object):
ROOT_PATH = '/'
LOGIN_PATH = ROOT_PATH + 'login'
SCHEME = 'http'
DOMAIN = 'localhost'
ROOT_URL = '%s://%s%s' % (SCHEME, DOMAIN, ROOT_PATH)
# config/production.pyfrom .default import Configclass ProductionConfig(Config):
ROOT_PATH = '/blog/'
LOGIN_PATH = ROOT_PATH + 'login'
DOMAIN = 'www.keakon.net'
ROOT_URL = '%s://%s%s' % (Config.SCHEME, DOMAIN, ROOT_PATH)
其中,LOGIN_PATH 和 LOGIN_URL 的设置逻辑其实是一样的,但值却不同,在 ProductionConfig 中重新赋值一次有点不太优雅。
于是把这些设置提取出来,在基本设置初始化以后,再进行设置:
class _AfterMeta(type):
def __init__(cls, name, bases, dct):
super(_AfterMeta, cls).__init__(name, bases, dct)
cls._after()class Config(object):
__metaclass__ = _AfterMeta
ROOT_PATH = '/'
SCHEME = 'http'
DOMAIN = 'localhost' @classmethod
def _after(cls):
cls.LOGIN_PATH = cls.ROOT_PATH + 'login'
cls.ROOT_URL = '%s://%s%s' % (cls.SCHEME, cls.DOMAIN, cls.ROOT_PATH)
# config/production.pyfrom .default import Configclass ProductionConfig(Config):
ROOT_PATH = '/blog/'
DOMAIN = 'www.keakon.net'
如何进行python项目配置管理?所有有依赖的设置项,都在 _after 方法里赋值即可。
不过这样可能导致静态检查和代码提示出问题,而且使得所有子类都重新定义这些属性,即便没有修改父类的属性,或是覆盖掉手动设置的值。所以可以再修改一下:[page]
class _AfterMeta(type):
def __init__(cls, name, bases, dct):
super(_AfterMeta, cls).__init__(name, bases, dct)
cls._after(dct)class Config(object):
__metaclass__ = _AfterMeta
ROOT_PATH = '/'
LOGIN_PATH = ROOT_PATH + 'login'
SCHEME = 'http'
DOMAIN = 'localhost'
ROOT_URL = '%s://%s%s' % (SCHEME, DOMAIN, ROOT_PATH) @classmethod
def _after(cls, own_attrs):
if 'LOGIN_PATH' not in own_attrs and 'ROOT_PATH' in own_attrs:
cls.LOGIN_PATH = cls.ROOT_PATH + 'login'
if 'ROOT_URL' not in own_attrs and ('SCHEME' in own_attrs or 'DOMAIN' in own_attrs or 'ROOT_PATH' in
own_attrs):
cls.ROOT_URL = '%s://%s%s' % (cls.SCHEME, cls.DOMAIN, cls.ROOT_PATH)
虽然问题是解决了,不过代码量似乎大了点,写起来很麻烦。只是似乎也没有更好解决办法,所幸这类配置并不多,所以重写一次倒也无妨。
最后只剩下分离公开和私有配置这个需求了。
既然要有私有配置,很容易想到的就是把私有配置放在另一个仓库里,再 link 到配置文件夹即可:
└── config
├── __init__.py
├── default.py
├── development.py ->private/development.py
├── development_sample.py
├── private (cloned from another private repository)
│ ├── development.py
│ └── production.py
├── production.py ->private/production.py
└── production_sample.py
为了避免文件被提交到公共仓库,私有的配置文件可以加到 .gitignore 里。
顺带一提,我的博客数据全存放在 Redis 中,备份时只要备份 rdb 文件即可。不过用另一台服务器来备份显得太奢侈了,所以我在服务器上装了个 Dropbox,然后把 Dropbox 文件夹里的数据文件夹 link 到博客的数据文件夹里,即:
doodle
└── data
└── redis ->~/Dropbox/doodle/redis
这样一旦文件有改动,Dropbox 就会自动进行备份,而且保留了所有的历史版本,简直完美。
如何进行python项目配置管理?这才是你最需要的python技术,我用于创建和管理虚拟环境的模块称为 venv。venv 通常会安装你可用的最新版本的 Python。如果您的系统上有多个版本的 Python,你能处理好吗?如果您还担心自己入门不顺利,那么本科目的其他文章一定会帮助你。