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

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值