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