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 colorama

colorama.init(True)
print(dir(colorama))
for t in "Fore Back Style".split():
ty = getattr(colorama, t)
for i in dir(ty):
if i.startswith('__'): continue
print(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,
) @classmethod
def 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'] += 30
return cls @classmethod
def 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'] += 40
return cls @classmethod
def bold(cls):
cls.format_buffer['is_bold'] = 1
return cls def __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'] = None
cls.format_buffer['bg_color'] = None
cls.format_buffer['is_bold'] = None
return 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 = None
key = f.__module__ + f.__name__ + arg
if hasattr(f, key):
res = getattr(f, key)
if time.time() - res['last_time'] > timeout:
res = None
if res is None:
res = {'last_time': time.time(), 'data': f(*args, **kwargs)}
setattr(f, key, res)
return res['data'] return ff return decorator

使用git submodules

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

[submodule "vendor/libbpp"]
path = vendor/libbpp
url = 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 deploy update:
git pull
git submodule update --init --recursive
pip3 install --user -r requirements.txt

简单的守护进程

supervisor.sh

#!/bin/bash
set -x while true; do
date
"$@"
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

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

好用好玩的Python包的更多相关文章

  1. 离线pip下载Python包

    离线pip下载Python包   这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧.      # 生产环境  windows xp# python 2 ...

  2. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  3. RobotFramework中加载自定义python包中的library(一个py文件中有多个类)

    结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...

  4. centos 7 下安装numpy、scipy等python包

    本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...

  5. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

  6. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  7. Python 包的相对导入讲解

    [Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html

  8. 转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

    from: http://www.linuxde.net/2014/05/15576.html CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法 2014/05/ ...

  9. 纯Python包发布setup脚本编写示例

    如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多.即使你的模块并不在一个包内,这种做法也行的通:你可以告诉Distutils从根包(root package)处 ...

随机推荐

  1. 2018WFU校赛B题

    我们在ACM的题目中已经了解了什么是ACM了,ACM还是很残酷的了(ಥ _ ಥ),那么现在你就要解决一个ACM最简单的题了,简单到省赛和区域赛都不会出这种简单的题.ls很强,即使每年都在ACM这个大坑 ...

  2. HDU 4185 Oil Skimming 【最大匹配】

    <题目链接> 题目大意: 给你一张图,图中有 '*' , '.' 两点,现在每次覆盖相邻的两个 '#' ,问最多能够覆盖几次. 解题分析: 无向图二分匹配的模板题,每个'#'点与周围四个方 ...

  3. vue-cli@3.x初体验之前篇-回顾vue-cli@2.x创建项目的流程

    模拟实际工作中的操作,假如新开启了一个vue项目,可以先看看上篇博文中的git操作,新建空仓库vue-demo,并拉取到本地,创建本地dev分支后 1. 全局安装vue-cli yarn global ...

  4. 发布网站配置IIS(把网上找到的解决方法综合了一下)

    1.由于权限不足而无法读取配置文件,无法访问请求的页面(参考网址:http://blog.csdn.net/yinjingjing198808/article/details/7185453) 2.处 ...

  5. 2016-2017 National Taiwan University World Final Team Selection Contest

    A. Hacker Cups and Balls 二分答案,将$\geq mid$的数看成$1$,$<mid$的数看成$0$,用线段树进行区间排序检查即可.时间复杂度$O(n\log^2n)$. ...

  6. mongodb 索引,全文索引与唯一索引

    唯一索引创建: db.createIndex({name: 1}, {unique: true})

  7. redis的主从服务器配置

    1. redis的主从配置: (1)把redis的配置文件(reids.conf)拷贝2份 [root@192 redis]# cp redis.conf redis6380.conf [root@1 ...

  8. HDU 2002 计算球体积

    题目链接:HDU 2002 Description 根据输入的半径值,计算球的体积. Input 输入数据有多组,每组占一行,每行包括一个实数,表示球的半径. Output 输出对应的球的体积,对于每 ...

  9. C#_02.16_基础七_.NET表达式&运算符

    C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...

  10. 关于实现udev/mdev自动挂载与卸载

    在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似.不能在挂载的目录中进行热插拔,否 ...