简明Python3教程 16.标准库
簡(jiǎn)介
python標(biāo)準(zhǔn)庫(kù)作為python標(biāo)準(zhǔn)安裝的一部分,其自身包含數(shù)量龐大的實(shí)用模塊,
因此熟悉python標(biāo)準(zhǔn)庫(kù)非常重要,因?yàn)楹芏鄦?wèn)題都能利用python標(biāo)準(zhǔn)庫(kù)快速解決。
下面我們將研究標(biāo)準(zhǔn)庫(kù)中的一些常用模塊。完整的標(biāo)準(zhǔn)庫(kù)模塊列表可以在安裝python時(shí)附帶的文檔中的’Library Reference’一節(jié)找到。
現(xiàn)在就讓我們來(lái)看看這些模塊吧。
?
提示
如果你感覺(jué)本章內(nèi)容對(duì)于你過(guò)于超前,那么可以跳過(guò)本章。但是當(dāng)你熟悉python編程后我強(qiáng)烈建議你把這章補(bǔ)上。
?
sys模塊
sys模塊包含一些系統(tǒng)相關(guān)的功能。先前我們已經(jīng)見(jiàn)識(shí)過(guò)sys.argv列表,它包括命令行參數(shù)。
假設(shè)我們想要檢查所使用的python命令行的版本,比方說(shuō)我們需要確定正在使用的版本不低于3。
諸如此類(lèi)的功能正是sys模塊所提供的。
>>> import sys
>>> sys.version_info
(3, 0, 0, 'beta', 2)
>>> sys.version_info[0] >= 3
True
代碼如何工作:
sys模塊含有一個(gè)version_info元組用于提供版本信息。其第一個(gè)元素為主版本。
因此我們可以通過(guò)檢查它確保程序只會(huì)運(yùn)行在python 3.0和3.0以上:
#!/usr/bin/python
# Filename: versioncheck.py
import sys, warnings
if sys.version_info[0] < 3:
??? warnings.warn("Need Python 3.0 for this program to run",
??????? RuntimeWarning)
else:
??? print('Proceed as normal')
輸出:
??? $ python2.5 versioncheck.py
??? versioncheck.py:6: RuntimeWarning: Need Python 3.0 for this program to run
????? RuntimeWarning)
???
??? $ python3 versioncheck.py
??? Proceed as normal
代碼如何工作:
這里我們使用標(biāo)準(zhǔn)庫(kù)中另一個(gè)名為warnings的模塊,用于向最終用戶顯示警告信息。
如果python版本號(hào)小于3,則顯示相應(yīng)的警告。
?
loggin模塊
如果你希望得到存儲(chǔ)在某處的重要信息或調(diào)試信息,以便檢查程序是否如期運(yùn)行時(shí)該咋辦呢?你如何將這些信息存儲(chǔ)在某處呢?
這些可以通過(guò)logging模塊做到。
#!/usr/bin/python
# Filename: use_logging.py
import os, platform, logging
if platform.platform().startswith('Windows'):
??? logging_file = os.path.join(os.getenv('HOMEDRIVE'),
os.getenv('HOMEPATH'), 'test.log')
else:
??? logging_file = os.path.join(os.getenv('HOME'), 'test.log')
logging.basicConfig(
??? level=logging.DEBUG,
??? format='%(asctime)s : %(levelname)s : %(message)s',
??? filename = logging_file,
??? filemode = 'w',
)
logging.debug("Start of the program")
logging.info("Doing something")
logging.warning("Dying now")
輸出:
??? $python use_logging.py
??? Logging to C:/Users/swaroop/test.log
If we check the contents of test.log, it will look something like this:
??? 2008-09-03 13:18:16,233 : DEBUG : Start of the program
??? 2008-09-03 13:18:16,233 : INFO : Doing something
??? 2008-09-03 13:18:16,233 : WARNING : Dying now
代碼如何工作:
我們使用了3個(gè)標(biāo)準(zhǔn)庫(kù)模塊 – os模塊與系統(tǒng)交互,platform模塊取得平臺(tái)信息,即操作系統(tǒng)信息。而logging模塊用于記錄日志信息。
首先,我們通過(guò)platform.platform(詳見(jiàn)import platform; help(platform))返回的字符串檢測(cè)操作系統(tǒng)類(lèi)型。
如果為windows系統(tǒng),則分別計(jì)算出主驅(qū)動(dòng)器,主目錄與文件名,這個(gè)文件用于存儲(chǔ)相關(guān)信息。然后將這三部分合并得到文件的全路徑。
對(duì)于其他平臺(tái),我們只需得到用戶的主目錄就能計(jì)算出文件的全路徑了。
我們之所以沒(méi)有簡(jiǎn)單的使用字符串連接合并這三部分而是利用os.path.join,原因在于這個(gè)特殊的函數(shù)可以確保路徑格式符合特定系統(tǒng)的規(guī)范。
之后我們配置logging模塊,指示在我們指定的文件中以特殊的格式寫(xiě)入所有信息。
最后,我們就能寫(xiě)入信息了,它們可以是調(diào)試信息,警告信息甚至是危機(jī)信息(critical messages)。
一但程序開(kāi)始運(yùn)行,我們就可以檢查這個(gè)文件以了解程序發(fā)生了什么,而用戶并不會(huì)看到這些信息。
?
urllib與json模塊
如果我們讓自己編寫(xiě)的程序在web上獲得搜索結(jié)果是不是很有趣呢?我們現(xiàn)在就來(lái)研究下。
這個(gè)功能可以通過(guò)少量模塊實(shí)現(xiàn)。第一urllib模塊使得我們可以訪問(wèn)internet上的任何網(wǎng)頁(yè)。
這里我們準(zhǔn)備利用雅虎搜索獲得搜索結(jié)果,它恰好以一種被稱(chēng)作JSON的格式為我們提供搜索結(jié)果。
這種格式分析起很方便,因?yàn)槲覀兪褂玫氖菢?biāo)準(zhǔn)庫(kù)中的內(nèi)建json模塊。
#!/usr/bin/python
# Filename: yahoo_search.py
import sys
if sys.version_info[0] != 3:
??? sys.exit('This program needs Python 3.0')
import json
import urllib, urllib.parse, urllib.request, urllib.response
# Get your own APP ID at http://developer.yahoo.com/wsregapp/
YAHOO_APP_ID =
'jl22psvV34HELWhdfUJbfDQzlJ2B57KFS_qs4I8D0Wz5U5_yCI1Awv8.lBSfPhwr'
SEARCH_BASE =
'http://search.yahooapis.com/WebSearchService/V1/webSearch'
class YahooSearchError(Exception):
??? pass
# Taken from http://developer.yahoo.com/python/python-json.html
def search(query, results=20, start=1, **kwargs):
??? kwargs.update({
??????? 'appid': YAHOO_APP_ID,
??????? 'query': query,
??????? 'results': results,
??????? 'start': start,
??????? 'output': 'json'
??? })
??? url = SEARCH_BASE + '?' + urllib.parse.urlencode(kwargs)
??? result = json.load(urllib.request.urlopen(url))
??? if 'Error' in result:
??????? raise YahooSearchError(result['Error'])
??? return result['ResultSet']
query = input('What do you want to search for? ')
for result in search(query)['Result']:
??? print("{0} : {1}".format(result['Title'], result['Url']))
代碼如何工作:
(注:這個(gè)例子目前有錯(cuò)誤,暫且跳過(guò))。
?
Module of the Week系列
標(biāo)準(zhǔn)庫(kù)中還有更多內(nèi)容有待探索,例如debug(http://docs.python.org/dev/library/pdb.html),
處理命令行選項(xiàng)(http://docs.python.org/py3k/library/getopt.html),
正則表達(dá)式(http://www.diveintopython.org/regular_expressions/index.html)等等。
而進(jìn)一步研究標(biāo)準(zhǔn)庫(kù)的最好辦法就是閱讀Python Module of the Week系列了(http://www.doughellmann.com/projects/PyMOTW/)。
?
小結(jié)
我們已經(jīng)探索了許多標(biāo)準(zhǔn)庫(kù)模塊中的功能。強(qiáng)烈推薦瀏覽python標(biāo)準(zhǔn)庫(kù)文檔以便對(duì)所有模塊有個(gè)概念性的認(rèn)識(shí)(http://docs.python.org/py3k/library/)
接下來(lái),我們將概覽python的方方面面讓我們的python之旅更加完整
?
?
?
--------------Python書(shū)籍推薦----------------- Python基礎(chǔ)教程-第2版.修訂版? 購(gòu)買(mǎi)地址1? 購(gòu)買(mǎi)地址2 PYTHON核心編程 購(gòu)買(mǎi)地址1??購(gòu)買(mǎi)地址2 零基礎(chǔ)學(xué)Python 購(gòu)買(mǎi)地址1??購(gòu)買(mǎi)地址2轉(zhuǎn)載于:https://www.cnblogs.com/txw1958/archive/2012/12/10/A_Byte_of_Python3_Standard_Library.html
總結(jié)
以上是生活随笔為你收集整理的简明Python3教程 16.标准库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GNU C - 关于8086的内存访问机
- 下一篇: JAVA在线购物B2C商城源码