Python常用庫(kù)大全,看看有沒有你需要的。
創(chuàng)新互聯(lián)建站長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為東遼企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),東遼網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
環(huán)境管理
管理 Python 版本和環(huán)境的工具
p – 非常簡(jiǎn)單的交互式 python 版本管理工具。
pyenv – 簡(jiǎn)單的 Python 版本管理工具。
Vex – 可以在虛擬環(huán)境中執(zhí)行命令。
virtualenv – 創(chuàng)建獨(dú)立 Python 環(huán)境的工具。
virtualenvwrapper- virtualenv 的一組擴(kuò)展。
包管理
管理包和依賴的工具。
pip – Python 包和依賴關(guān)系管理工具。
pip-tools – 保證 Python 包依賴關(guān)系更新的一組工具。
conda – 跨平臺(tái),Python 二進(jìn)制包管理工具。
Curdling – 管理 Python 包的命令行工具。
wheel – Python 分發(fā)的新標(biāo)準(zhǔn),意在取代 eggs。
包倉(cāng)庫(kù)
本地 PyPI 倉(cāng)庫(kù)服務(wù)和代理。
warehouse – 下一代 PyPI。
Warehousebandersnatch – PyPA 提供的 PyPI 鏡像工具。
devpi – PyPI 服務(wù)和打包/測(cè)試/分發(fā)工具。
localshop – 本地 PyPI 服務(wù)(自定義包并且自動(dòng)對(duì) PyPI 鏡像)。
分發(fā)
打包為可執(zhí)行文件以便分發(fā)。
PyInstaller – 將 Python 程序轉(zhuǎn)換成獨(dú)立的執(zhí)行文件(跨平臺(tái))。
dh-virtualenv – 構(gòu)建并將 virtualenv 虛擬環(huán)境作為一個(gè) Debian 包來(lái)發(fā)布。
Nuitka – 將腳本、模塊、包編譯成可執(zhí)行文件或擴(kuò)展模塊。
py2app – 將 Python 腳本變?yōu)楠?dú)立軟件包(Mac OS X)。
py2exe – 將 Python 腳本變?yōu)楠?dú)立軟件包(Windows)。
pynsist – 一個(gè)用來(lái)創(chuàng)建 Windows 安裝程序的工具,可以在安裝程序中打包 Python本身。
構(gòu)建工具
將源碼編譯成軟件。
buildout – 一個(gè)構(gòu)建系統(tǒng),從多個(gè)組件來(lái)創(chuàng)建,組裝和部署應(yīng)用。
BitBake – 針對(duì)嵌入式 Linux 的類似 make 的構(gòu)建工具。
fabricate – 對(duì)任何語(yǔ)言自動(dòng)找到依賴關(guān)系的構(gòu)建工具。
PlatformIO – 多平臺(tái)命令行構(gòu)建工具。
PyBuilder – 純 Python 實(shí)現(xiàn)的持續(xù)化構(gòu)建工具。
SCons – 軟件構(gòu)建工具。
交互式解析器
交互式 Python 解析器。
IPython – 功能豐富的工具,非常有效的使用交互式 Python。
bpython- 界面豐富的 Python 解析器。
ptpython – 高級(jí)交互式Python解析器, 構(gòu)建于python-prompt-toolkit 之上。
文件
文件管理和 MIME(多用途的網(wǎng)際郵件擴(kuò)充協(xié)議)類型檢測(cè)。
imghdr – (Python 標(biāo)準(zhǔn)庫(kù))檢測(cè)圖片類型。
mimetypes – (Python 標(biāo)準(zhǔn)庫(kù))將文件名映射為 MIME 類型。
path.py – 對(duì) os.path 進(jìn)行封裝的模塊。
pathlib – (Python3.4+ 標(biāo)準(zhǔn)庫(kù))跨平臺(tái)的、面向?qū)ο蟮穆窂讲僮鲙?kù)。
python-magic- 文件類型檢測(cè)的第三方庫(kù) libmagic 的 Python 接口。
Unipath- 用面向?qū)ο蟮姆绞讲僮魑募湍夸?/p>
watchdog – 管理文件系統(tǒng)事件的 API 和 shell 工具
日期和時(shí)間
操作日期和時(shí)間的類庫(kù)。
arrow- 更好的 Python 日期時(shí)間操作類庫(kù)。
Chronyk – Python 3 的類庫(kù),用于解析手寫格式的時(shí)間和日期。
dateutil – Python datetime 模塊的擴(kuò)展。
delorean- 解決 Python 中有關(guān)日期處理的棘手問題的庫(kù)。
moment – 一個(gè)用來(lái)處理時(shí)間和日期的Python庫(kù)。靈感來(lái)自于Moment.js。
PyTime – 一個(gè)簡(jiǎn)單易用的Python模塊,用于通過字符串來(lái)操作日期/時(shí)間。
pytz – 現(xiàn)代以及歷史版本的世界時(shí)區(qū)定義。將時(shí)區(qū)數(shù)據(jù)庫(kù)引入Python。
when.py – 提供用戶友好的函數(shù)來(lái)幫助用戶進(jìn)行常用的日期和時(shí)間操作。
文本處理
用于解析和操作文本的庫(kù)。
通用
chardet – 字符編碼檢測(cè)器,兼容 Python2 和 Python3。
difflib – (Python 標(biāo)準(zhǔn)庫(kù))幫助我們進(jìn)行差異化比較。
ftfy – 讓Unicode文本更完整更連貫。
fuzzywuzzy – 模糊字符串匹配。
Levenshtein – 快速計(jì)算編輯距離以及字符串的相似度。
pangu.py – 在中日韓語(yǔ)字符和數(shù)字字母之間添加空格。
pyfiglet -figlet 的 Python實(shí)現(xiàn)。
shortuuid – 一個(gè)生成器庫(kù),用以生成簡(jiǎn)潔的,明白的,URL 安全的 UUID。
unidecode – Unicode 文本的 ASCII 轉(zhuǎn)換形式 。
uniout – 打印可讀的字符,而不是轉(zhuǎn)義的字符串。
xpinyin – 一個(gè)用于把漢字轉(zhuǎn)換為拼音的庫(kù)。
Python 默認(rèn)腳本文件都是 ANSCII 編碼的,當(dāng)文件 中有非 ANSCII 編碼范圍內(nèi)的字符的時(shí)候就要使用"編碼指示"來(lái)修正。 一個(gè)module的定義中,如果.py文件中包含中文字符(嚴(yán)格的說是含有非anscii字符),則需要在第一行或第二行指定編碼聲明:
# -*- coding=utf-8 -*-或者 #coding=utf-8 其他的編碼如:gbk、gb2312也可以; 否則會(huì)出現(xiàn)類似:SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; see for details這樣的異常信息;n.org/peps/pep-0263.html
命令查看腳本默認(rèn)的編碼方式
import sys
sys.getdefaultencoding()
'ascii'
2.2 python中的編碼與解碼
先說一下python中的字符串類型,在python中有兩種字符串類型,分別是str和unicode,他們都是basestring的派生類;str類型是一個(gè)包含Characters represent (at least) 8-bit bytes的序列;unicode的每個(gè)unit是一個(gè)unicode obj;所以:
len(u'中國(guó)')的值是2;len('ab')的值也是2;
在str的文檔中有這樣的一句話:The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file. 也就是說在讀取一個(gè)文件的內(nèi)容,或者從網(wǎng)絡(luò)上讀取到內(nèi)容時(shí),保持的對(duì)象為str類型;如果想把一個(gè)str轉(zhuǎn)換成特定編碼類型,需要把str轉(zhuǎn)為Unicode,然后從unicode轉(zhuǎn)為特定的編碼類型如:utf-8、gb2312等;
2.2.1 print 語(yǔ)句解釋編碼問題
print 是打印默認(rèn)的編碼方式,相當(dāng)于對(duì)任何對(duì)象encode編碼轉(zhuǎn)化成str對(duì)象。默認(rèn)是gbk的編碼就是對(duì)Unicode進(jìn)行自動(dòng)的gbk編碼,再按照gbk編碼輸出。
當(dāng)print語(yǔ)句碰到一個(gè)unicode目標(biāo)的時(shí)候,會(huì)用當(dāng)前python shell環(huán)境的默認(rèn)編碼格式首先對(duì)unicode對(duì)象進(jìn)行encode(此時(shí)unicode對(duì)象已經(jīng)變成了一個(gè)str對(duì)象了),然后再以默認(rèn)編碼格式為基礎(chǔ),根據(jù)其包含的漢字和編碼的對(duì)應(yīng)規(guī)則,把這個(gè)str對(duì)象解釋成中文并顯示出來(lái)。但是當(dāng)print語(yǔ)句碰到的直接是個(gè)str目標(biāo)的時(shí)候,就不管其從unicode轉(zhuǎn)到str時(shí)用的編碼格式是什么,直接用默認(rèn)編碼格式的對(duì)應(yīng)規(guī)則來(lái)解釋成中文。所以,當(dāng)unicode對(duì)象轉(zhuǎn)換成str時(shí)的編碼格式和print語(yǔ)句的默認(rèn)編碼格式不一致的時(shí)候就會(huì)出現(xiàn)亂碼現(xiàn)象。比如在cmd的python shell里面:
復(fù)制代碼
復(fù)制代碼
證明Python 系統(tǒng)默認(rèn)編碼gbk
s= '你好'
s
'\xc4\xe3\xba\xc3'
s = u'你好'
s
u'\xc4\xe3\xba\xc3'
s = '你好'
s
'\xc4\xe3\xba\xc3'
print type(s)
type 'str'
unicode 編碼打印錯(cuò)誤,print 解析字符串而不是Unicode 編碼
s = u'你好'
print s
??o?
uni = u'你好' #存入一個(gè)unicode對(duì)象
print uni
你好 #可以正常顯示 相當(dāng)于Unicode.encode(gbk)
uni.encode("gbk")
'\xc4\xe3\xba\xc3' #顯示的是個(gè)str對(duì)象了,如果type(uni.encode("gbk"))得到的就是str對(duì)象
print uni.encode("gbk")
你好 #可以正常顯示,因?yàn)樵赾md下的pythonshell里默認(rèn)個(gè)編碼格式就是gbk,gbk解析
uni.encode("utf-8")
'\xe4\xbd\xa0\xe5\xa5\xbd' #可以看到,encode用的編碼格式不同,編成的字符串也是不同的
print uni.encode("utf-8")
浣犲ソ #亂碼,因?yàn)橛昧薵bk中漢字和字符串編碼格式對(duì)應(yīng)規(guī)則去解釋了用utf-8編碼成的字符串。解釋的編碼格式不對(duì)應(yīng)。
#######さらに######
print '\xc4\xe3' #自己寫出來(lái)的這么個(gè)字符串(前面不加r)的話也會(huì)被print解釋成中文,按照編碼格式輸出
你
print uni.encode("utf-8").decode("gbk")
浣犲ソ
'''
亂碼,而且和上面的亂碼一樣,這是因?yàn)?,在uni被utf-8 encode之后,這個(gè)對(duì)象變成了str對(duì)象,是'\xe4\xbd\xa0\xe5\xa5\xbd' 這個(gè)。
后來(lái),它又被按照gbk的規(guī)則解碼,又變回了unicode,但是此時(shí)它在內(nèi)存里的二進(jìn)制數(shù)據(jù)已經(jīng)和最初的uni不一樣了。
最初的uni,應(yīng)該是'\xc4\xe3\xba\xc3'.decode("gbk"),而現(xiàn)在的這個(gè)東西,他decode之前的字符串已經(jīng)變過了。
這么一個(gè)東西再拿去print,又把它編碼成了gbk格式,相當(dāng)于前面那步decode沒有做,變回了'\xe4\xbd\xa0\xe5\xa5\xbd'。
再解釋成漢字,當(dāng)然就和最開始用uni編碼成utf-8格式再解釋成漢字的亂碼一樣了
'''
復(fù)制代碼
2.2.2 腳本print 打印的正確方式
上面已經(jīng)證明了系統(tǒng)的默認(rèn)編碼方式是gbk,就是print 最后正確的編碼方式應(yīng)該是gbk
兩種解決編碼不匹配的情況:
一是明確的指示出 s 的編碼方式
# -*- coding: utf-8 -*-
s = '中文'
s.decode('utf-8').encode('gb2312')
二是更改 sys.defaultencoding 為文件的編碼方式
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys) # Python2.5 初始化后會(huì)刪除 sys.setdefaultencoding 這個(gè)方法,我們需要重新載入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')
三、實(shí)踐經(jīng)驗(yàn)中爬取數(shù)據(jù)的獲得
復(fù)制代碼
# -*- coding: utf-8 -*-
'''
#加油兩個(gè)字可以很好的比較編碼正確和錯(cuò)誤
#### 錯(cuò)誤的處理方式,
s = "中文"
print s
#這里print就不是輸出gbk的編碼,是按照頭文件utf-8的格式輸出
# 結(jié)果:中文
print s.decode('utf-8')
#結(jié)果中文,s進(jìn)行解碼稱為Unicode,print打印就和系統(tǒng)print打印一樣自動(dòng)將Unicode進(jìn)行
#解碼,不用encode編碼也能輸出,但是最好轉(zhuǎn)化成為字符串輸出。
上面實(shí)例就是錯(cuò)誤使用編碼,錯(cuò)誤使用編碼會(huì)出現(xiàn)個(gè)別字體的亂碼。
'''
'''
要點(diǎn)1、聲明頭文件# -*- coding: utf-8 -*- 說明所有的代碼和中文是utf-8的編碼方式
要點(diǎn)2、print輸出函數(shù)輸出到前臺(tái)cmd中的默認(rèn)系統(tǒng)編碼方式是GBK,
要點(diǎn)3、盡量將Unicode轉(zhuǎn)化成為字符串str (gbk或者utf-8),再去處理。
#unicode 轉(zhuǎn)化成為字符串
s = u'加油'
print s
#結(jié)果:加油。原因:系統(tǒng)自動(dòng)將Unicode升級(jí)gbk編碼成為字符串,然后系統(tǒng)print 打印gbk
print s.encode('utf-8')
#結(jié)果:鍔犳補(bǔ)。錯(cuò)誤原因:Unicode 編碼成為utf-8的字符串形式,但是print打印系統(tǒng)是gbk的,編碼沖突。
print s.encode('gbk')
#結(jié)果:加油。原因:和print s等價(jià),認(rèn)為編碼了gbk,系統(tǒng)打印
ss = "加油"
print ss
#結(jié)果:鍔犳補(bǔ)。原因:ss為utf-8的字符串str,print 打印的對(duì)應(yīng)編碼字符串是gbk的,所以編碼沖突。
print ss.decode('utf-8').encode('gbk')
#結(jié)果:加油。原因:ss首先從字符串編碼utf-8解碼成為unicode,然后進(jìn)行編碼gbk,等價(jià)使用print ss.decode('utf-8')。
'''
'''
3.1python中關(guān)于中文轉(zhuǎn)換url編碼的問題
爬蟲的時(shí)候我們經(jīng)常會(huì)碰到中文鏈接編碼出現(xiàn)變換的問題,
例如'麗江'中文在url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',
因此需 要做一個(gè)轉(zhuǎn)換。這里我們就用到了模塊urllib。
'''
import urllib
data = '麗江'
print data.decode('utf-8').encode('gbk')
#對(duì)utf-8的中文編碼
print urllib.quote(data)
#那我們想轉(zhuǎn)回去呢?
print urllib.unquote('%E4%B8%BD%E6%B1%9F').decode('utf-8').encode('gbk')
'''
'麗江'在網(wǎng)頁(yè)編碼是gbk的轉(zhuǎn)換碼是'%C0%F6%BD%AD',utf-8中的轉(zhuǎn)化碼是'%E4%B8%BD%E6%B1%9F',其實(shí)是編碼問題。
百度的是gbk,其他的一般網(wǎng)站比如google就是utf8的。所以可以用下列語(yǔ)句實(shí)現(xiàn)。
'''
#江蘇課題的編碼轉(zhuǎn)化
import sys,urllib
s = '江蘇'
print urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
print urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
for place in ['南京','無(wú)錫','徐州','常州','蘇州','鹽城','南通','連云港','淮安','鹽城','揚(yáng)州']:
print urllib.quote(place)
####################
#結(jié)果:
'''
麗江
%E4%B8%BD%E6%B1%9F
麗江
%E4%B8%BD%E6%B1%9F
%E6%B6%93%E8%8A%A5%E7%9D%99
'''
參考:知乎
Python 常用的標(biāo)準(zhǔn)庫(kù)以及第三方庫(kù)
standard libs:
itertools
functools 學(xué)好python有必要掌握上面這兩個(gè)庫(kù)吧,
re 正則
subprocess 調(diào)用shell命令的神器
pdb 調(diào)試
traceback 調(diào)試
pprint 漂亮的輸出
logging 日志
threading和multiprocessing 多線程
urllib/urllib2/httplib http庫(kù),httplib底層一點(diǎn),推薦第三方的庫(kù)requests
os/sys 系統(tǒng),環(huán)境相關(guān)
Queue 隊(duì)列
pickle/cPickle 序列化工具
hashlib md5, sha等hash算法
cvs
json/simplejson python的json庫(kù),據(jù)so上的討論和benchmark,simplejson的性能要高于json
timeit 計(jì)算代碼運(yùn)行的時(shí)間等等
cProfile python性能測(cè)量模塊
glob 類似與listfile,可以用來(lái)查找文件
atexit 有一個(gè)注冊(cè)函數(shù),可用于正好在腳本退出運(yùn)行前執(zhí)行一些代碼
dis python 反匯編,當(dāng)對(duì)某條語(yǔ)句不理解原理時(shí),可以用dis.dis 函數(shù)來(lái)查看代碼對(duì)應(yīng)的python 解釋器指令等等。
3th libs:
paramiko ssh python 庫(kù)
selenium 瀏覽器自動(dòng)化測(cè)試工具selenium的python 接口
lxml python 解析html,xml 的神器
mechanize Stateful programmatic web browsing
pycurl cURL library module for Python
Fabric Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
xmltodict xml 轉(zhuǎn) dict,真心好用
urllib3 和 requests: 當(dāng)然其實(shí)requests就夠了 Requests: HTTP for Humans
flask web 微框架
ipdb 調(diào)試神器,同時(shí)推薦ipython!結(jié)合ipython使用
redis redis python接口
pymongo mongodbpython接口
PIL python圖像處理
mako python模版引擎
numpy , scipy 科學(xué)計(jì)算
matplotlib 畫圖
scrapy 爬蟲
django/tornado/web.py/web2py/uliweb/flask/twisted/bottle/cherrypy.等等 python web框架/服務(wù)器
sh 1.08 — sh v1.08 documentation 用來(lái)運(yùn)行shell 模塊的 極佳選擇
python unicode編碼:
下面的代碼創(chuàng)建了一個(gè)Unicode字符串,用UTF-8編碼器將它編碼,然后寫入到一個(gè)文件中去,接著把數(shù)據(jù)從文件中讀回來(lái),解碼成Unicode字符串對(duì)象,最后,打印出Unicode字符串,用以確認(rèn)程序正確地運(yùn)行。
在Linux中編寫,在VIM中輸入如下代碼,保存為uniFile.py
#?/home/xiaopeng/python/code/uniFile.py
'''
An?example?of?reading?and?writing?Unicode?strings:Writes
a?Unicode?string?to?a?file?in?utf-8?and?reads?it?back?in
'''
CODEC?=?'utf-8'?編碼方式
FILE?=?'unicode.txt'?要存的文件名
hello_out?=?u"Hello?world\n"?創(chuàng)建了一個(gè)Unicode格式的字符串
bytes_out?=?hello_out.encode(CODEC)?用UTF-8編碼
f?=?open(FILE,'w')
f.write(bytes_out)?寫入指定文件中
f.close()
f?=?open(FILE,'r')
bytes_in?=?f.read()?讀取
f.close()
hello_in?=?bytes_in.decode(CODEC)?解碼
print?hello_in?打印
在終端中輸入:python uniFile.py
結(jié)果打印出 Hello world
然后在python目錄下會(huì)發(fā)現(xiàn)多了一個(gè)名為unicode.txt的文件,用cat命令查看一下,發(fā)現(xiàn)里面的內(nèi)容和打印的結(jié)果一樣.
把Unicode應(yīng)用到實(shí)際中注意一下四點(diǎn):
1?程序中出現(xiàn)字符串時(shí)一定要加一個(gè)前綴u
2?不要用str()函數(shù),用Unicode()代替
3 不要用過時(shí)的string模塊。如果傳給它非ASCII碼,它會(huì)把一切搞砸。
4 不到必須時(shí)不要在你的程序里編解碼Unicode字符,只在你要寫入文件或者數(shù)據(jù)庫(kù)或者網(wǎng)絡(luò)時(shí),才調(diào)用encode()函數(shù)和decode()函數(shù)。
sudo是獲取權(quán)限的,在linux中使用,windows你cmd直接pip install就可以了,權(quán)限不夠也可以使用管理員打開,但是它實(shí)際上是因?yàn)樘囟ǖ奈募A具有權(quán)限。