本書由資深Python專家親自執(zhí)筆,Python語言的核心開發(fā)人員鼎力推薦。
對(duì)程序員而言,標(biāo)準(zhǔn)庫與語言本身同樣重要,它好比一個(gè)百寶箱,能為各種常見的任務(wù)提供完美的解決方案,所以本書是所有Python程序員都必備的工具書!全書以案例驅(qū)動(dòng)的方式講解了標(biāo)準(zhǔn)庫中數(shù)百個(gè)模塊的使用方法(如何工作)和工作原理(為什么要這樣工作),比標(biāo)準(zhǔn)庫的官方文檔更容易理解(一個(gè)簡單的示例比一份手冊(cè)文檔更有幫助),為Python程序員熟練掌握和使用這些模塊提供了絕佳指導(dǎo)。
本書共19章,系統(tǒng)而全面地對(duì)Python 3標(biāo)準(zhǔn)庫中的數(shù)百個(gè)模塊進(jìn)行了生動(dòng)的講解。這些模塊主要包括:文本處理工具模塊,與數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的模塊,管理日期和時(shí)間值的模塊,用于數(shù)學(xué)計(jì)算的模塊,管理文件系統(tǒng)的模塊,用于數(shù)據(jù)存儲(chǔ)與交換的模塊,用于數(shù)據(jù)壓縮與歸檔的模塊,用于加密的模塊,與進(jìn)程和線程相關(guān)的模塊,與網(wǎng)絡(luò)通信、Internet和Email相關(guān)的模塊,應(yīng)用構(gòu)建模塊,支持處理多種自然語言和文化設(shè)置的模塊,開發(fā)工具模塊,與運(yùn)行時(shí)特性相關(guān)的模塊等。
標(biāo)準(zhǔn)庫會(huì)隨每一版Python的發(fā)布而發(fā)布,其中包含數(shù)百個(gè)模塊,為操作系統(tǒng)、解釋器和互聯(lián)網(wǎng)之間的交互提供了豐富的工具所有這些模塊都得到充分測試,可以用來作為應(yīng)用開發(fā)的起點(diǎn)。本書會(huì)提供一些精選的例子,向你展示如何使用這些模塊中最常用的一些特性,正是這些特性使Python有了內(nèi)含動(dòng)力(batteries included)的座右銘。這些例子均取自頗受關(guān)注的Python Module of the Week(PyMOTW)博客系列。本書讀者對(duì)象本書的讀者應(yīng)該是中等程度的Python程序員,所以盡管書中對(duì)所有源代碼都做了討論,卻也只有少數(shù)情況會(huì)逐行給出解釋。每一節(jié)都強(qiáng)調(diào)了模塊的特性,并通過源代碼以及完全獨(dú)立的示例程序的輸出來具體說明。本書還盡可能簡潔地介紹了各個(gè)特性,使讀者能夠把重點(diǎn)放在所展示的模塊或函數(shù)上,而不會(huì)因支持代碼而分心。熟悉其他語言的有經(jīng)驗(yàn)的程序員可以利用本書來了解Python,但本書并不是關(guān)于Python語言的入門讀物。研究這些例子時(shí),如果之前有編寫Python程序的經(jīng)驗(yàn),那么一定會(huì)很有幫助。很多章節(jié)(比如介紹套接字網(wǎng)絡(luò)編程或hmac加密的章節(jié))還需要一些領(lǐng)域特定的知識(shí)。書中會(huì)提供解釋這些例子所需的基本信息,不過由于標(biāo)準(zhǔn)庫中模塊涵蓋的主題如此寬泛,所以不可能在一本書中全面地介紹每一個(gè)主題。在每個(gè)模塊的討論之后,還提供了一個(gè)推薦資源列表,大家可以進(jìn)一步閱讀這些資源,從中了解更多信息。推薦資源包括在線資源、RFC標(biāo)準(zhǔn)文檔以及相關(guān)圖書。Python 3與Python 2Python社區(qū)目前正在從Python 2向Python 3過渡。從主版本號(hào)可以看出,Python 2和Python 3有很多不兼容之處,而且這種不兼容不只是存在于語言中。Python 3中很多標(biāo)準(zhǔn)庫模塊都已經(jīng)改名或者重新組織。Python開發(fā)社區(qū)認(rèn)識(shí)到這種不兼容可能需要一個(gè)很長的過渡期,最終Python庫和工具的生態(tài)系統(tǒng)會(huì)更新為使用Python 3。盡管很多項(xiàng)目仍依賴于Python 2,但Python 2目前只接受安全更新,并且還計(jì)劃在2020年前完全廢棄。所有新特性都只能在Python 3版本中使用。編寫可以同時(shí)用于這兩個(gè)版本的程序可能很有難度,但并不是全無可能。這樣做通常要求檢查程序在哪個(gè)Python版本下運(yùn)行,并且在導(dǎo)入時(shí)使用不同的模塊名,或者在調(diào)用類或函數(shù)時(shí)使用不同的參數(shù)。在標(biāo)準(zhǔn)庫之外,已經(jīng)有大量工具可以簡化這個(gè)過程。為了保證本書中的例子盡可能簡潔,同時(shí)仍然只依賴于標(biāo)準(zhǔn)庫,我們將主要強(qiáng)調(diào)Python 3。所有例子已經(jīng)在Python 3.5上通過測試(寫作本書時(shí)3.x系列的當(dāng)前版本),如果不加修改,可能無法用于Python 2。要查看專門為使用Python 2而設(shè)計(jì)的例子,請(qǐng)參考本書的Python 2版本《Python標(biāo)準(zhǔn)庫》。為了保證為每個(gè)例子提供清晰而簡潔的描述,每一章不會(huì)過分強(qiáng)調(diào)Python 2和Python 3的差別。關(guān)于移植說明的附錄會(huì)總結(jié)這兩個(gè)版本之間一些最大的區(qū)別,這部分內(nèi)容會(huì)合理組織,以便能有效地幫助從Python 2到Python 3的移植。本書組織結(jié)構(gòu)http://docs.python.org上提供了詳盡的參考指南,而本書可以作為補(bǔ)充,提供功能完備的示例程序來展示這里介紹的特性。模塊被分組為不同章節(jié),以便輕松查找單個(gè)模塊作為參考,并且可以按主題瀏覽進(jìn)行更深層次的探討。盡管可能不會(huì)一頁頁地從頭到尾閱讀本書,但如果你確實(shí)想要這么做,那么為了預(yù)備這種情況,本書也做了合理的組織,盡可能不要求你提前參考還沒有介紹過的模塊,不過要想完全避免這種情況是不可能的。下載示例代碼原來的博客文章和示例代碼可以在https://pymotw.com/3/找到。本書勘誤可以從作者的網(wǎng)站(https://doughellmann.com/blog/the-python-3-standard-library-by-example/)下載。致謝如果沒有大家的貢獻(xiàn)和支持,這本書絕無可能問世。1997年Dick Wall讓我第一次接觸到Python,那時(shí)我們正在ERDAS一起合作開發(fā)GIS軟件。記得在發(fā)現(xiàn)這樣一個(gè)如此簡便易用的新的工具語言時(shí),我便立刻喜歡上了它,而且還對(duì)公司不讓我們用它來完成實(shí)際工作頗有不滿。在接下來的所有工作中我大量使用了Python,而這正是因?yàn)镈ick,我要感謝從那以后軟件開發(fā)給我?guī)淼目鞓窌r(shí)光。Python核心開發(fā)小組創(chuàng)建了一個(gè)由語言、工具和庫共同構(gòu)建的健壯的生態(tài)系統(tǒng),這些庫在日益普及,也在不斷發(fā)現(xiàn)新的應(yīng)用領(lǐng)域。如果沒有他們付出的寶貴時(shí)間,沒有他們提供的豐富資源,我們可能還得花時(shí)間一次又一次地從頭開始。本書中的材料最初是一系列博客帖子。如果沒有博客讀者們異常積極的響應(yīng),這些文章不會(huì)更新成使用Python 3,這本新書也不可能出現(xiàn)。每個(gè)帖子都得到了Python社區(qū)成員的審閱和評(píng)論,有糾正,有建議,也有問題,這些評(píng)論促使我做出修改,這才有了你手上這本書。感謝大家日復(fù)一日地花時(shí)間來閱讀我的博客,謝謝大家投入的時(shí)間和精力。本書的技術(shù)審校人員Diana Clarke、Ian Cordasco、Mark McClain、Paul McLanahan和Ryan Petrello花了大量時(shí)間查找示例代碼和相關(guān)解釋中存在的問題。感謝他們的辛勤工作,最終的作品遠(yuǎn)比我靠一人之力得到的結(jié)果好得多。Jim Baker描述readline模塊時(shí)提供了很有幫助的觀點(diǎn),特別是為那些GNU庫很老或者默認(rèn)未安裝GNU庫的平臺(tái)提出了gnureadline包。Patr
道格·赫爾曼
(Doug Hellmann)
目前任職于Red Hat,主要負(fù)責(zé)開發(fā)OpenStack項(xiàng)目。他是OpenStack技術(shù)委員會(huì)的委員,對(duì)這個(gè)項(xiàng)目的很多方面做出了突出貢獻(xiàn)。他從Python 1.4版本就開始投入Python編程,曾在多種UNIX和非UNIX平臺(tái)上參與項(xiàng)目開發(fā),涉及領(lǐng)域包括地圖、醫(yī)療新聞播報(bào)、金融和數(shù)據(jù)中心自動(dòng)化。Doug也是Python Software Foundation的成員,并于2010~2012年擔(dān)任其信息交流主管。在為《Python Magazine》做了一年普通專欄作家后,他于2008~2009年擔(dān)任該雜志的主編。2007~2011年間,Doug在他的博客上發(fā)表了頗受關(guān)注的Python Module of the Week系列,以及本書的上一個(gè)版本(面向Python
2),即《Python標(biāo)準(zhǔn)庫》(Addison-Wesley, 2011)。
譯者序前言第1章 文本 11.1 string:文本常量和模板 11.1.1 函數(shù) 11.1.2 模板 21.1.3 高級(jí)模板 31.1.4 Formatter 51.1.5 常量 51.2 textwrap:格式化文本段落 61.2.1 示例數(shù)據(jù) 61.2.2 填充段落 71.2.3 去除現(xiàn)有的縮進(jìn) 71.2.4 結(jié)合dedent和f?ill 81.2.5 縮進(jìn)塊 81.2.6 懸掛縮進(jìn) 101.2.7 截?cái)嚅L文本 101.3 re:正則表達(dá)式 111.3.1 查找文本中的模式 111.3.2 編譯表達(dá)式 121.3.3 多重匹配 131.3.4 模式語法 141.3.5 限制搜索 221.3.6 用組解析匹配 241.3.7 搜索選項(xiàng) 291.3.8 前向或后向 351.3.9 自引用表達(dá)式 381.3.10 用模式修改字符串 421.3.11 利用模式拆分 441.4 diff?lib:比較序列 461.4.1 比較文本體 471.4.2 無用數(shù)據(jù) 491.4.3 比較任意類型 50第2章 數(shù)據(jù)結(jié)構(gòu) 522.1 enum:枚舉類型 532.1.1 創(chuàng)建枚舉 532.1.2 迭代 532.1.3 比較Enum 542.1.4 唯一枚舉值 552.1.5 通過編程創(chuàng)建枚舉 562.1.6 非整數(shù)成員值 582.2 collections:容器數(shù)據(jù)類型 602.2.1 ChainMap:搜索多個(gè)字典 602.2.2 Counter:統(tǒng)計(jì)可散列的對(duì)象 632.2.3 defaultdict:缺少的鍵返回一個(gè)默認(rèn)值 662.2.4 deque:雙端隊(duì)列 672.2.5 namedtuple:帶命名字段的元組子類 702.2.6 OrderedDict:記住向字典中增加鍵的順序 742.2.7 collections.abc:容器的抽象基類 762.3 數(shù)組:固定類型數(shù)據(jù)序列 782.3.1 初始化 782.3.2 處理數(shù)組 792.3.3 數(shù)組和文件 792.3.4 候選字節(jié)順序 802.4 heapq:堆排序算法 812.4.1 示例數(shù)據(jù) 812.4.2 創(chuàng)建堆 822.4.3 訪問堆的內(nèi)容 832.4.4 堆的數(shù)據(jù)極值 852.4.5 高效合并有序序列 852.5 bisect:維護(hù)有序列表 862.5.1 有序插入 862.5.2 處理重復(fù) 872.6 queue:線程安全的FIFO實(shí)現(xiàn) 882.6.1 基本FIFO隊(duì)列 882.6.2 LIFO隊(duì)列 892.6.3 優(yōu)先隊(duì)列 892.6.4 構(gòu)建一個(gè)多線程播客客戶程序 902.7 struct:二進(jìn)制數(shù)據(jù)結(jié)構(gòu) 932.7.1 函數(shù)與Struct類 932.7.2 打包和解包 932.7.3 字節(jié)序 942.7.4 緩沖區(qū) 952.8 weakref:對(duì)象的非永久引用 962.8.1 引用 962.8.2 引用回調(diào) 972.8.3 最終化對(duì)象 982.8.4 代理 1002.8.5 緩存對(duì)象 1012.9 copy:復(fù)制對(duì)象 1032.9.1 淺副本 1032.9.2 深副本 1042.9.3 定制復(fù)制行為 1052.9.4 深副本中的遞歸 1062.10 pprint:美觀打印數(shù)據(jù)結(jié)構(gòu) 1072.10.1 打印 1082.10.2 格式化 1082.10.3 任意類 1092.10.4 遞歸 1102.10.5 限制嵌套輸出 1102.10.6 控制輸出寬度 111第3章 算法 1133.1 functools:管理函數(shù)的工具 1133.1.1 修飾符 1133.1.2 比較 1193.1.3 緩存 1223.1.4 縮減數(shù)據(jù)集 1253.1.5 泛型函數(shù) 1273.2 itertools:迭代器函數(shù) 1293.2.1 合并和分解迭代器 1293.2.2 轉(zhuǎn)換輸入 1323.2.3 生成新值 1333.2.4 過濾 1353.2.5 數(shù)據(jù)分組 1383.2.6 合并輸入 1393.3 operator:內(nèi)置操作符的函數(shù)接口 1443.3.1 邏輯操作 1443.3.2 比較操作符 1453.3.3 算術(shù)操作符 1453.3.4 序列操作符 1463.3.5 原地操作符 1483.3.6 屬性和元素獲取方法 1483.3.7 結(jié)合操作符和定制類 1503.4 contextlib:上下文管理器工具 1513.4.1 上下文管理器API 1513.4.2 上下文管理器作為函數(shù)修飾符 1533.4.3 從生成器到上下文管理器 1543.4.4 關(guān)閉打開的句柄 1563.4.5 忽略異常 1573.4.6 重定向輸出流 1583.4.7 動(dòng)態(tài)上下文管理器棧 159第4章 日期和時(shí)間 1664.1 time:時(shí)鐘時(shí)間 1664.1.1 比較時(shí)鐘 1664.1.2 墻上時(shí)鐘時(shí)間 1674.1.3 單調(diào)時(shí)鐘 1684.1.4 處理器時(shí)鐘時(shí)間 1694.1.5 性能計(jì)數(shù)器 1704.1.6 時(shí)間組成 1704.1.7 處理時(shí)區(qū) 1714.1.8 解析和格式化時(shí)間 1724.2 datetime:日期和時(shí)間值管理 1744.2.1 時(shí)間 1744.2.2 日期 1754.2.3 timedelta 1774.2.4 日期算術(shù)運(yùn)算 1784.2.5 比較值 1794.2.6 結(jié)合日期和時(shí)間 1794.2.7 格式化和解析 1804.2.8 時(shí)區(qū) 1824.3 calendar:處理日期 1834.3.1 格式化示例 1834.3.2 本地化環(huán)境 1854.3.3 計(jì)算日期 186第5章 數(shù)學(xué)運(yùn)算 1885.1 decimal:定點(diǎn)數(shù)和浮點(diǎn)數(shù)的數(shù)學(xué)運(yùn)算 1885.1.1 Decimal 1885.1.2 格式化 1895.1.3 算術(shù)運(yùn)算 1905.1.4 特殊值 1915.1.5 上下文 1925.2 fractions:有理數(shù) 1965.2.1 創(chuàng)建Fraction實(shí)例 1975.2.2 算術(shù)運(yùn)算 1985.2.3 近似值 1995.3 random:偽隨機(jī)數(shù)生成器 1995.3.1 生成隨機(jī)數(shù) 2005.3.2 指定種子 2005.3.3 保存狀態(tài) 2015.3.4 隨機(jī)整數(shù) 2025.3.5 選擇隨機(jī)元素 2035.3.6 排列 2035.3.7 采樣 2055.