Python实用技巧(一)
Python实用技巧(一)
1、print 打印带有颜色的信息
def esc(code=0):
return f'\033[{code}m'
print(esc('1;31;43') + 'Error:'+esc()+'important')
执行后会输出
其中最主要的就是f’\033[{code}m’部分的设置。
这叫ANSI颜色序列格式,通过/033转义为控制颜色的命令。
其标准形式为
\033[n1 [;n2 [;…]] m
n1,n2,n3为设置的值。其含义为
以下参考了博客Linux终端和win32控制台文本颜色输出
编码 | 说明 |
---|---|
0 | 关闭所有格式,还原为初始状态 |
1 | 粗体/高亮显示 |
2 | 模糊(※) |
3 | 斜体(※) |
4 | 下划线(单线) |
5 | 闪烁(慢) |
6 | 闪烁(快)(※) |
7 | 交换背景色与前景色 |
8 | 隐藏(伸手不见五指,啥也看不见)(※) |
30-37 | 前景色,即30+x,x表示不同的颜色(参见下面的“颜色表”) |
40-47 | 背景色,即40+x,x表示不同的颜色(参见下面的“颜色表”) |
注:(1)其中含有(※)标注的编码表示不是所有的终端仿真器都支持,只有少数仿真器支持。
(2)多个SGR参数可以组合使用,例如:echo -e “\x1b[31;4mRed Underline Text\e[0m”输出红色下划线字体“Red Underline Text”。
颜色表:
颜色值x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
颜色 | 黑 | 红 | 绿 | 黄 | 蓝 | 紫 | 青 | 白 |
这样的话\033[1;31;43m
中1代表粗体高亮显示,31代表前景色为红色,43代表背景色为黄色。
另外
def esc(code=0):
return f'\033[{code}m'
是将其封装了起来,只需要填入控制颜色的数字字符串就行,比如'1;31;43'
注:1、输入为字符串格式;2、每个数字之间用分号连接
然后,f'\033[{code}m'
是什么意思呢?
- 字符串前加 u表示后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。不过一般情况下Python默认编码是utf-8。支持中文字符,所以一般不用专门加u
- 字符串前加 r表示不使用转义字符,比如’\n‘就是’\n‘,不转义为换行了。
- 字符串前加 b,表示以bytes类型储存字符串。一般用来发送数据流。服务器和硬件开发可能用得到。
- 字符串前加 f表示在字符串内支持大括号内的python 表达式
所以f'\033[{code}m'
表示先执行code会输出code表示的字符串,(code默认为0,输出为字符串0),然后与其他部分拼接到一块,形成f'\033['1;31;43'm'
2、在Python中使用定时器
import schedule
import time
def job():
print("I'm working...")
schedule.every(10).minutes.do(job) #每隔十分钟执行一次job
schedule.every(10).seconds.do(job)#每隔十秒钟执行一次job
schedule.every().hour.do(job)#每隔十秒钟执行一次job
schedule.every().day.at("10:30").do(job)#每天10:30执行一次job
schedule.every().monday.do(job)#每周一执行一次job
schedule.every().wednesday.at("13:15").do(job)#每周三13:15执行一次job
schedule.every().minute.at(":17").do(job)#每分钟的第17秒执行一次job
while True:
schedule.run_pending()##执行到时间的任务
time.sleep(1)#每隔一秒检测一次
3、实现一个进度条
from time import sleep
def progress(percent=0, width=30):
left = width * percent // 100
right = width - left
print('\r[', '#' * left, ' ' * right, ']',#\r是转义字符回车
f' {percent:.0f}%',
sep='', end='', flush=True)#sep是分割字符(默认为空格),end是结尾字符(默认为换行)flush是刷新控制台的字符,这是实现进度条的核心所在
for i in range(101):
progress(i)#从1%到100%
sleep(0.1)
默认 flush = False,不刷新,print 到 f 中的内容先存到内存中;而当 flush = True 时它会立即把内容刷新并输出。
之前在Python 下载夏目友人帐中提到饿的 tqdm 模块,更好的实现一个进度条.(还有实现下载视频),抽空实现一下下载视频这种大文件。
4、优雅的打印嵌套类型数据
不一定用得到,就是为了好看而已。
#第一种实现方法
import json
my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
print(json.dumps(my_mapping, indent=4, sort_keys=True))
#第二种实现方法
import pprint
my_mapping = [{'a': 23, 'b': 42, 'c': 0xc0ffee},{'a': 231, 'b': 42, 'c': 0xc0ffee}]
pprint.pprint(my_mapping,width=4)
本文主要参考了别再说学习无趣了,跟你分享这 8 条 Python 奇技淫巧!,其他我觉得并没什么用。所以不做过多陈述了
5. 极其有用的Jupyter notebook插件
安装扩展插件
pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install
然后激活自己想用的插件即可
参考Jupyter Notebook 五大效率插件 (qq.com) 和[Jupyter Notebook Extensions. How to get the most from the notebook… | by Will Koehrsen | Towards Data Science](https://towardsdatascience.com/jupyter-notebook-extensions-517fa69d2231) |
对本文有任何问题,请在下面评论: