click

最好的实现命令行的方式,它基于optparse。
optparse和argparse是python标准库,但它们不够好用。
docopt通过解析注释来实现命令行。

Fire

无侵入的命令行工具,和click、argparse是同类东西。

ujson

用C++实现的json解析器,速度飞快。

prettytable

在控制台下使用表格展示数据

import prettytable
t=prettytable.PrettyTable(['name','age'])
for i in range(10):t.add_row(['user%s'%i,i])
print(t)

tabulate

tabulate包只有一个tabulate函数

data参数

支持打印的数据类型

  • 二维list或者其它二维可迭代对象
  • 一维字典列表,每个字典表示一行
  • 二维numpy数组
  • numpy记录数组
  • pandas.DataFrame

header

  • firstrow
  • keys
  • 字符串列表

showindex

  • 布尔值,是否显示每行的下标
  • rowId列表,手动指定每行的ID

tablefmt

  • "plain"
  • "simple"
  • "github"
  • "grid"
  • "fancy_grid"
  • "pipe"
  • "orgtbl"
  • "jira"
  • "presto"
  • "psql"
  • "rst"
  • "mediawiki"
  • "moinmoin"
  • "youtrack"
  • "html"
  • "latex"
  • "latex_raw"
  • "latex_booktabs"
  • "textile"

参考资料

wget

>>> import wget
>>> url = 'http://www.futurecrew.com/skaven/song_files/mp3/razorback.mp3'
>>> filename = wget.download(url)
100% [................................................] 3841532 / 3841532>
>> filename
'razorback.mp3'

linux和osx的用户还有其它选择:from sh import wget。

progressbar

人尽皆知的tqdm就不必多说了,这里说一个更为灵活的进度条

from progressbar import ProgressBar
import time
pbar = ProgressBar(maxval=10)
for i in range(1, 11):pbar.update(i)time.sleep(1)
pbar.finish()

colorama

向控制台打印彩色文字。这个库非常简洁优美,它主要包含四种东西:

  • Fore:设置前景色
  • Back:设置背景色
  • Style:设置字体粗细,分为Bright、DIM、NORMAL、RESET_ALL四种
  • Cursor:控制光标,分为UP,DOWN,FORWARD,BACK,POS五种函数,其中方向函数接受一个参数n,表示移动的格数,POS接受x和y两个参数表示把光标移动到的位置。
import coloramacolorama.init(True)
print(dir(colorama))
for t in "Fore Back Style".split():ty = getattr(colorama, t)for i in dir(ty):if i.startswith('__'): continueprint(t, i, getattr(ty, i) + "天下大势为我所控")print("haha" + colorama.Cursor.BACK(2) + "baga")  # 输出habaga

如下代码展示了颜色打印的原理

class Colorize:color_map = {'black': 0,'red': 1,'green': 2,'yellow': 3,'blue': 4,'magenta': 5,'cyan': 6,'white': 7}format_buffer = dict(bg_color=None,text_color=None,is_bold=None,)@classmethoddef text(cls, color):cls.format_buffer['text_color'] = cls.color_map.get(color.lower(), None)if cls.format_buffer['text_color'] is not None:cls.format_buffer['text_color'] += 30return cls@classmethoddef bg(cls, color):cls.format_buffer['bg_color'] = cls.color_map.get(color.lower(), None)if cls.format_buffer['bg_color'] is not None:cls.format_buffer['bg_color'] += 40return cls@classmethoddef bold(cls):cls.format_buffer['is_bold'] = 1return clsdef __new__(cls, *message, delimiter=' '):result = '\033[{}m{}\033[0m'.format(';'.join([str(x) for x in cls.format_buffer.values() if x is not None]),delimiter.join([str(m) for m in message]))cls.format_buffer['text_color'] = Nonecls.format_buffer['bg_color'] = Nonecls.format_buffer['is_bold'] = Nonereturn result

使用时print(Colorize.text(color)(s))

functools.lru_cache

最近最少使用装饰器,用于缓存函数运行结果。
此装饰器接受两个参数:maxsize和typed。当maxsize=None时,无限存储;否则maxsize必须是一个int值,表示缓存的参数类型种数。如果typed=True,则缓存认为3.0和3是同一个key。
此装饰器修饰的函数的参数必须都是可以求哈希值的参数。
如果用此装饰器修饰f()函数,可通过f.cache_info()查看缓存信息,包括:命中次数,失败次数,缓存的最大大小,当前缓存大小。
使用f.cache_clear()可以清空缓存。

import functools@functools.lru_cache(maxsize=2, typed=False)
def haha(x):print(haha.__name__, x, 'is called')return str(x)haha(1)
haha(2)
haha(3)
print(haha.cache_info())
haha(1)
haha(3)
haha.cache_clear()
haha(3)"""输出
haha 1 is called
haha 2 is called
haha 3 is called
CacheInfo(hits=0, misses=3, maxsize=2, currsize=2)
haha 1 is called
haha 3 is called
"""

在不知道此装饰器之前,我自己写过一个同样功能的装饰器,但是肯定不如此装饰器考虑的详细。

def simple_cache(timeout=3):"""基于内存的缓存:param timeout: float 缓存过期的时间,单位为秒:return: 返回被装饰的函数的返回值注意事项:* 被装饰的函数的参数必须可以被可序列化为JSON,否则调用出错* 对于参数种类很多的函数,不要使用此装饰器,否则内存容易爆* 此装饰器适合装饰>>> @simple_cache(timeout=3)>>>  def haha(user_id):>>>     print("haha", user_id)>>> haha(0)# 第一次访问user_id=0的用户,调用haha这个函数>>> haha(0)#第二次调用user_id=0的用户,使用缓存,不会调用haha这个函数>>> haha(1)#第一次调用user_id=1的用户,缓存未命中,会调用haha这个函数>>> time.sleep(5)>>> haha(1)#经过一段时间后,缓存失效,第二次调用user_id=1的用户缓存未命中,会调用haha这个函数"""def decorator(f):def ff(*args, **kwargs):arg = json.dumps([args, kwargs])res = Nonekey = f.__module__ + f.__name__ + argif hasattr(f, key):res = getattr(f, key)if time.time() - res['last_time'] > timeout:res = Noneif res is None:res = {'last_time': time.time(), 'data': f(*args, **kwargs)}setattr(f, key, res)return res['data']return ffreturn decorator

使用git submodules

当一个repo依赖另一个repo,另一个repo无法通过pip安装时,就需要添加一个.gitmodules文件,文件内容如下:

[submodule "vendor/libbpp"]path = vendor/libbppurl = git@git-core.megvii-inc.com:SkunkWorks/libbpp.git

使用命令git submodule update --init --recursive可以初始化gitmodule。

使用make命令

一个项目包含的命令可能非常多,而这些命令又非常短,如果每个命令都新建一个.bat或者.sh会显得非常啰嗦,这时make就派上用场了。在node中,可以通过package.json配置命令,但是那样只能配置一个命令。make可以把多个长命令用一个短命令替代。

deploy:make -j 64 -f Makefile.work deployupdate:git pullgit submodule update --init --recursivepip3 install --user -r requirements.txt

简单的守护进程

supervisor.sh

#!/bin/bash
set -xwhile true; dodate"$@"sleep 1
done

使用时直接supervisor.sh haha,就可以在haha停止时的下一秒钟自动运行haha。

pony

pony是一个python orm框架,用户不必书写SQL,该框架自动将python语法转成SQL语句。
Pony is a Python ORM with beautiful query syntax.
https://ponyorm.org/

sendToTrash

兼容多个平台,把文件发送到垃圾桶。

转载于:https://www.cnblogs.com/weiyinfu/p/10705520.html

好用好玩的Python包相关推荐

  1. python 好玩_好用好玩的Python包

    click 最好的实现命令行的方式,它基于optparse. optparse和argparse是python标准库,但它们不够好用. docopt通过解析注释来实现命令行. Fire 无侵入的命令行 ...

  2. python包 wget_Python数据科学“冷门”库

    原标题 | Lesser Known Python Libraries for Data Science 作者 | Parul Pandey 译者 | CONFIDANT(福建师范大学).Seabis ...

  3. python包引用问题

    python模块引用梳理 文件组织结构: 复制代码 t ├── __init__.py ├── main.py ├── t1 │ ├── A.py │ └── __init__.py └── t2 ├ ...

  4. Python包管理工具Distribute的安装

    Python包管理工具Distribute的安装 Python的包管理工具常见的有easy_install, setuptools, 还有pip, distribute,那麽这几个工具有什么关系呢,看 ...

  5. python 发布包_如何将自己的Python包发布到PyPI

    以前写过一篇类似的文章: 如何打包自己的项目并且发布到pypi上,不过由于PyPI进行了一些更新,因此旧方法不大适用了.趁端午有时间,想把haipproxy的客户端发布到PyPI,以改进用户体验,因此 ...

  6. Python 包安装和 postgresql 的一些问题

    今天安装 hgvs 这个 python 包的时候,遇到几个比较有代表性的问题,记录分享一下. hgvs is a Python package to parse, format, validate, ...

  7. python包NiBabel对医学影像文件格式进行读写:python包NiBabel简介集示例

    python包NiBabel对医学影像文件格式进行读写:python包NiBabel简介集示例 目录 python包NiBabel对医学影像文件格式进行读写:python包NiBabel简介集示例

  8. python包NiBabel对医学影像文件格式进行读写并可视化实战:查看和显示.nii.gz、.nii文件

    python包NiBabel对医学影像文件格式进行读写并可视化实战:查看和显示.nii.gz..nii文件 目录 python包NiBabel对医学影像文件格式进行读写并可视化实战:查看和显示.nii ...

  9. 使用python包faker生成仿真数据

    使用python包faker生成仿真数据 在编写程序过程中,我们常常需要用到很多数据来进行测试.如果要是手动制造数据的话,肯定要花费大把精力,这不合理.此时我们应该使用Faker这个Python库,用 ...

最新文章

  1. 加密保护软件 WinLicense 注册常见问题(一):许可证
  2. 【java下午茶系列】java三重奏之封装
  3. 1113:不与最大数相同的数字之和
  4. frida hook so层方法大全
  5. 记一次OpenJDK替换java JDK
  6. Jenkins 安装与使用--实例
  7. Linux下的重要目录
  8. 表单PostGet两个长度限制问题的分析
  9. Ubuntu 安装Wireshark
  10. iPhone SDK开发基础之iPhone程序框架
  11. C#中的委托和Java中的“委托”(Java8 lambda表达式)
  12. android webview缩放功能,在Android WebView中启用/禁用缩放
  13. win10桌面未找到计算机,两种方法帮你解决Win10桌面找不到IE浏览器
  14. 5 月最大的 GameFi 崩溃受害者能否在熊市中生存?| May Monthly Report
  15. python画图像_使用python绘制SDSS图像
  16. java 多文件zip压缩包下载导出
  17. 中国移动“梧桐杯”大数据应用创新大赛强势来袭三大赛道再续辉煌
  18. vue使用高德地图第一次进去点标记有数据,第二次进去就没有了
  19. SNMP实现网络状态监控
  20. 携程再爆大数据杀熟,携程致歉信:程序 bug 已紧急修复,将赔偿用户

热门文章

  1. 二分图匹配的判断+p1322+二分图最大匹配+tyvj1035
  2. js中的call和apply方法的区别
  3. Hibernate学习笔记之EHCache的配置
  4. Java程序实现密钥库的维护
  5. Hibernate读书笔记---继承映射
  6. SpringBoot 集成 Jsp、Thymeleaf 模板引擎 + Thymeleaf 基本使用
  7. 【网络安全工程师面试合集】—谈一谈什么是网络安全?
  8. Linux操作Oracle(10)——plsql配置Oracle客户端方法【Oracle客户端安装、资源下载】详细教程
  9. c语言 乘号 指针 避免,C语言指针篇(一)指针与指针变量
  10. 家里安装20M宽带,为什么看视频都不卡,但一玩游戏就卡的要死?