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