Python Cookbook(第2版)中文版
基本資料
作者: Alex Martelli Anna Ravenscroft David Ascher
譯者: 高鐵軍[同譯者作品]
出版社:人民郵電出版社
ISBN:9787115222664
上架時間:2010-5-7
出版日期:2010 年5月
開本:16開
更多詳細資料請查看:http://www.china-pub.com/196697
前五章樣張試讀地址:http://www.china-pub.com/computers/common/mianfeisd.asp?id=196697
編輯精選
O'Reilly著名的Cookbook系列之一,Python領域裡久負盛名的技術圖書,第一版好評如潮,Amazon五星推薦。
內容簡介
本書介紹了Python應用在各個領域中的一些提示和方法,從最基本的字元、檔案序列、字典和排序,到進階的物件導向編程、資料庫和資料持久化、XML處理和Web編程,再到比較進階和抽象的描述符、裝飾器、元類、迭代器和產生器,均有涉及。書中還介紹了一些第三方包和庫的使用,包括Twisted、GIL、PyWin32等。本書覆蓋了Python應用中的很多常見問題,並提出了通用的解決方案。書中的代碼和方法具有很強的實用性,可以方便地應用到實際的項目中,併產生立竿見影的效果。尤為難得的是,本書的各位作者都具有豐富的業界實踐經驗,因此,本書不僅給出了對各種問題的解決方案,同時還體現了很多專家的思維方式和良好的編程習慣,與具體的細節性知識相比,這部分內容無疑是本書的精華。
本書適合具有一定Python基礎的讀者閱讀參考。
目錄
第1章 文本 1
引言 1
1.1 每次處理一個字元 6
1.2 字元和字元值之間的轉換 7
1.3 測試一個對象是否是類字串 8
1.4 字串對齊 10
1.5 去除字串兩端的空格 11
1.6 合并字串 11
1.7 將字串逐字元或逐詞反轉 14
1.8 檢查字串中是否包含某字元集合中的字元 15
1.9 簡化字串的translate方法的使用 18
1.10 過濾字串中不屬於指定集合的字元 20
1.11 檢查一個字串是文本還是二進位 23
1.12 控制大小寫 25
1.13 訪問子字串 26
1.14 改變多行文本字串的縮排 29
1.15 擴充和壓縮定位字元 31
1.16 替換字串中的子串 33
1.17 替換字串中的子串—Python 2.4 34
1.18 一次完成多個替換 36
.1.19 檢查字串中的結束標記 39
1.20 使用Unicode來處理國際化文本 40
1.21 在Unicode和一般字元串之間轉換 43
1.22 在標準輸出中列印Unicode字元 45
1.23 對Unicode資料編碼並用於XML和HTML 46
1.24 讓某些字串大小寫不敏感 49
1.25 將HTML文檔轉化為文本顯示到UNIX終端上 52
第2章 檔案 55
引言 55
2.1 讀取檔案 59
2.2 寫入檔案 62
2.3 搜尋和替換檔案中的文本 64
2.4 從檔案中讀取指定的行 65
2.5 計算檔案的行數 66
2.6 處理檔案中的每個詞 68
2.7 隨機輸入/輸出 70
2.8 更新隨機存取檔案 71
2.9 從zip檔案中讀取資料 73
2.10 處理字串中的zip檔案 74
2.11 將檔案樹歸檔到一個壓縮的tar檔案 76
2.12 將位元據發送到Windows的標準輸出 77
2.13 使用C++的類iostream文法 78
2.14 回退輸入檔案到起點 80
2.15 用類檔案對象適配真實檔案對象 83
2.16 遍曆分類樹 84
2.17 在分類樹中改變副檔名 85
2.18 從指定的搜尋路徑尋找檔案 86
2.19 根據指定的搜尋路徑和模式尋找檔案 87
2.20 在Python的搜尋路徑中尋找檔案 88
2.21 動態地改變Python搜尋路徑 89
2.22 計算目錄間的相對路徑 91
2.23 跨平台地讀取無緩衝的字元 93
2.24 在Mac OS X平台上統計PDF文檔的頁數 94
2.25 在Windows平台上修改檔案屬性 95
2.26 從OpenOffice.org文檔中提取文本 96
2.27 從微軟Word文檔中抽取文本 97
2.28 使用跨平台的檔案鎖 98
2.29 帶版本號碼的檔案名稱 100
2.30 計算CRC-64迴圈冗餘碼校正 102
第3章 時間和財務計算 105
引言 105
3.1 計算昨天和明天的日期 111
3.2 尋找上一個星期五 112
3.3 計算日期之間的時段 114
3.4 計算歌曲的總播放時間 115
3.5 計算日期之間的工作日 116
3.6 自動查詢節日 118
3.7 日期的模糊查詢 121
3.8 檢查夏令時是否正在實行 123
3.9 時區轉換 124
3.10 反覆執行某個命令 125
3.11 定時執行命令 127
3.12 十進位數學計算 129
3.13 將十進位數用於貨幣處理 130
3.14 用Python實現的簡單加法器 133
3.15 檢查信用卡校正和 136
3.16 查看匯率 137
第4章 Python技巧 139
引言 139
4.1 對象拷貝 140
4.2 通過列表推導構建列表 144
4.3 若列表中某元素存在則返回之 146
4.4 逐一查看序列中的元素和索引 147
4.5 在無須共用引用的條件下建立列表的列表 148
4.6 展開一個嵌套的序列 149
4.7 在行列表中完成對列的刪除和排序 152
4.8 二維陣列變換 154
4.9 從字典中取值 155
4.10 給字典增加一個條目 157
4.11 在無須過多援引的情況下建立字典 158
4.12 將列表元素交替地作為鍵和值來建立字典 159
4.13 擷取字典的一個子集 161
4.14 反轉字典 163
4.15 字典的一鍵多值 164
4.16 用字典指派方法和函數 166
4.17 字典的並集與交集 167
4.18 搜集命名的子項 169
4.19 用一條陳述式完成賦值和測試 171
4.20 在Python中使用printf 174
4.21 以指定的機率擷取元素 174
4.22 在運算式中處理異常 176
4.23 確保名字已經在給定模組中被定義 178
第5章 搜尋和排序 180
引言 180
5.1 對字典排序 185
5.2 不區分大小寫對字串列表排序 185
5.3 根據對象的屬性將對象列表排序 187
5.4 根據對應值將鍵或索引排序 189
5.5 根據內嵌的數字將字串排序 192
5.6 以隨機順序處理列表的元素 193
5.7 在增加元素時保持序列的順序 195
5.8 擷取序列中最小的幾個元素 197
5.9 在排序完畢的序列中尋找元素 199
5.10 選取序列中最小的第n個元素 200
5.11 三行代碼的快速排序 203
5.12 檢查序列的成員 206
5.13 尋找子序列 208
5.14 給字典類型增加排名功能 210
5.15 根據姓的首字母將人名排序和分組 214
第6章 物件導向編程 217
引言 217
6.1 溫標的轉換 223
6.2 定義常量 225
6.3 限制屬性的設定 227
6.4 鏈式字典查詢 229
6.5 繼承的替代方案—自動裝載 231
6.6 在代理中託管特殊方法 234
6.7 有命名子項的元組 237
6.8 避免屬性讀寫的冗餘代碼 239
6.9 快速複製對象 240
6.10 保留對被Binder 方法的引用且支援記憶體回收 243
6.11 緩衝環的實現 245
6.12 檢查一個執行個體的狀態變化 249
6.13 檢查一個對象是否包含某種必要的屬性 252
6.14 實現狀態設計模式 255
6.15 實現單例模式 257
6.16 用Borg慣用法來避免“單例”模式 259
6.17 Null對象設計模式的實現 263
6.18 用_ _init_ _參數自動初始化執行個體變數 266
6.19 調用超類的_ _init_ _方法 267
6.20 精確和安全地使用協作的超類調用 270
第7章 持久化和資料庫 273
引言 273
7.1 使用marshal模組序列化資料 275
7.2 使用pickle和cPickle模組序列化資料 277
7.3 在Pickling的時候壓縮 280
7.4 對類和執行個體使用cPickle模組 281
7.5 Pickling被Binder 方法 284
7.6 Pickling代碼對象 286
7.7 通過shelve修改對象 288
7.8 使用Berkeley DB資料庫 291
7.9 訪問MySQL資料庫 294
7.10 在MySQL資料庫中儲存BLOB 295
7.11 在PostgreSQL中儲存BLOB 296
7.12 在SQLite中儲存BLOB 298
7.13 產生一個字典將欄位名映射為列號 300
7.14 利用dtuple實現對查詢結果的靈活訪問 302
7.15 列印資料庫遊標的內容 304
7.16 適用於各種DB API模組的單參數傳遞風格 306
7.17 通過ADO使用Microsoft Jet 308
7.18 從Jython Servlet訪問JDBC資料庫 310
7.19 通過Jython和ODBC獲得Excel資料 313
第8章 調試和測試 315
引言 315
8.1 阻止某些條件和迴圈的執行 316
8.2 在Linux上測量記憶體使用量 317
8.3 調試記憶體回收進程 318
8.4 捕獲和記錄異常 320
8.5 在偵錯模式中跟蹤運算式和注釋 322
8.6 從traceback中獲得更多資訊 324
8.7 當未捕獲異常發生時自動啟用調試器 327
8.8 簡單的使用單元測試 328
8.9 自動運行單元測試 330
8.10 在Python 2.4中使用doctest和unittest 331
8.11 在單元測試中檢查區間 334
第9章 進程、線程和同步 336
引言 336
9.1 同步對象中的所有方法 339
9.2 終止線程 342
9.3 將Queue.Queue用作優先順序隊列 344
9.4 使用線程池 346
9.5 以多組參數並存執行函數 349
9.6 用簡單的訊息傳遞協調線程 351
9.7 儲存線程資訊 353
9.8 無線程的多任務協作 357
9.9 在Windows中探測另一個指令碼執行個體的運行 359
9.10 使用MsgWaitForMultipleObjects處理Windows訊息 360
9.11 用popen驅動外部進程 363
9.12 擷取UNIX Shell命令的輸出資料流和錯誤流 364
9.13 在UNIX中fork一個守護進程 367
第10章 系統管理 370
引言 370
10.1 產生隨機密碼 371
10.2 產生易記的偽隨機密碼 372
10.3 以POP伺服器的方式驗證使用者 375
10.4 統計Apache中每個IP的點擊率 376
10.5 統計Apache的客戶緩衝的命中率 378
10.6 在指令碼中調用編輯器 379
10.7 備份檔案 381
10.8 選擇性地複製郵箱檔案 383
10.9 通過郵箱建立一個郵件地址的白名單 384
10.10 阻塞重複郵件 386
10.11 檢查你的Windows聲音系統 388
10.12 在Windows中註冊和反註冊DLL 388
10.13 檢查並修改Windows自動運行任務 390
10.14 在Windows中建立共用 391
10.15 串連一個正在啟動並執行Internet Explorer執行個體 392
10.16 讀取Microsoft Outlook Contacts 393
10.17 在Mac OS X中收集詳細的系統資訊 396
第11章 使用者介面 400
引言 400
11.1 在文本控制台中顯示進度條 402
11.2 避免在編寫回呼函數時使用lambda 404
11.3 在tkSimpleDialog函數中使用預設值和區間 405
11.4 給Tkinter列表框增加拖曳排序能力 406
11.5 在Tkinter組件中輸入一個重音字元 408
11.6 在Tkinter中嵌入內聯的GIF 410
11.7 轉換圖片格式 412
11.8 在Tkinter中實現一個秒錶 415
11.9 用線程實現GUI和非同步I/O 的結合 417
11.10 在Tkinter中使用IDLE的 Tree組件 421
11.11 在Tkinter Listbox中支援單行多值 423
11.12 在Tkinter組件之間複製Geometry方法和選項 427
11.13 在Tkinter中實現一個帶標籤的記事本 429
11.14 使用wxPython實現帶面板的記事本 431
11.15 在Jython中實現一個ImageJ外掛程式 433
11.16 用Swing和Jython來通過URL查看圖片 434
11.17 在Mac OS中獲得使用者輸入 434
11.18 程式化地建立Python Cocoa GUI 437
11.19 用IronPython實現淡入視窗 439
第12章 XML處理 441
引言 441
12.1 檢查XML的格式完好性 443
12.2 計算文檔中標籤的個數 444
12.3 獲得XML文檔中的文本 445
12.4 自動探測XML的編碼 447
12.5 將一個XML文檔轉化成Python對象樹 449
12.6 從XML DOM節點的子樹中刪除僅有空白符的文本節點 451
12.7 解析Microsoft Excel的XML 452
12.8 驗證XML文檔 454
12.9 過濾屬於指定命名空間的元素和屬性 455
12.10 用SAX合并連續的文本事件 458
12.11 使用MSHTML來解析XML或HTML 461
第13章 網路編程 462
引言 462
13.1 通過Socket資料報傳輸訊息 464
13.2 從Web抓取文檔 466
13.3 過濾FTP網站列表 467
13.4 通過SNTP協議從伺服器擷取時間 468
13.5 發送HTML郵件 469
13.6 在MIME訊息中綁入檔案 471
13.7 拆解一個分段MIME訊息 474
13.8 刪除郵件訊息中的附件 475
13.9 修複Python 2.4的email.FeedParser 解析的訊息 477
13.10 互動式地檢查POP3郵箱 479
13.11 探測不活動的電腦 482
13.12 用HTTP監視網路 487
13.13 網路連接埠的轉寄和重新導向 489
13.14 通過代理建立SSL隧道 492
13.15 實現動態IP協議 495
13.16 登入到IRC並將訊息記錄到磁碟 498
13.17 訪問LDAP服務 500
第14章 Web編程 502
引言 502
14.1 測試CGI是否在工作 503
14.2 用CGI指令碼處理URL 506
14.3 用CGI上傳檔案 507
14.4 檢查web頁面的存在 509
14.5 通過HTTP檢查內容類型 510
14.6 續傳HTTP下載檔案 512
14.7 抓取Web頁面時處理Cookie 513
14.8 通過帶身分識別驗證的代理進行HTTPS導航 516
14.9 用Jython實現Servlet 517
14.10 尋找Internet Explorer的cookie 519
14.11 產生OPML檔案 521
14.12 彙總RSS Feed 524
14.13 通過模板將資料放入Web頁面 527
14.14 在Nevow中呈現任意對象 530
第15章 分布式編程 534
引言 534
15.1 實現一個XML-RPC方法調用 536
15.2 服務XML-RPC請求 537
15.3 在Medusa中使用XML-RPC 539
15.4 允許XML-RPC服務被遠程終止 541
15.5 SimpleXMLRPCServer的一些細節 542
15.6 給一個XML-RPC服務提供一個wxPython GUI 544
15.7 使用Twisted的Perspective Broker 546
15.8 實現一個CORBA服務和客戶 549
15.9 使用telnetlib執行遠程登入 551
15.10 使用SSH執行遠程登入 554
15.11 通過HTTPS驗證一個SSL用戶端 557
第16章 關於程式的程式 559
引言 559
16.1 驗證字串是否代表著一個合法的數字 564
16.2 匯入一個動態產生的模組 565
16.3 匯入一個名字在運行時被確定的模組 567
16.4 將參數和函數聯絡起來 568
16.5 組合函數 571
16.6 使用內建的Tokenizer給Python源碼上色 572
16.7 合并和拆解Token 575
16.8 檢查字串是否有平衡的圓括弧 577
16.9 在Python中類比枚舉 580
16.10 在建立列表推導時引用它自身 583
16.11 自動化py2exe將指令碼編譯成Windows可執行檔的過程 585
16.12 在UNIX中將主指令碼和模組綁成一個可執行檔 587
第17章 擴充和嵌入 590
引言 590
17.1 實現一個簡單的擴充類型 592
17.2 用Pyrex實現一個簡單的擴充類型 597
17.3 在Python中使用C++庫 598
17.4 調用Windows DLL的函數 601
17.5 在多線程環境中使用SWIG產生的模組 603
17.6 用PySequence_Fast將Python序列轉為 C數組 604
17.7 用迭代器逐個訪問Python序列的元素 608
17.8 從Python可調用的C函數中返回None 611
17.9 用gdb調試動態載入的C擴充 613
17.10 調試記憶體問題 614
第18章 演算法 616
引言 616
18.1 消除序列中的重複 619
18.2 在保留序列順序的前提下消除其中的重複 621
18.3 產生回置採樣 625
18.4 產生無回置的抽樣 626
18.5 緩衝函數的傳回值 627
18.6 實現一個FIFO容器 629
18.7 使用FIFO策略來緩衝對象 631
18.8 實現一個Bag(Multiset)收集類型 634
18.9 在Python類比三元操作符 637
18.10 計算素數 640
18.11 將整數格式化為二進位字串 642
18.12 以任意數為基將整數格式化為字串 644
18.13 通過法雷分數將數字轉成有理數 646
18.14 帶誤差傳遞的數學計算 648
18.15 以最大精度求和 651
18.16 類比浮點數 653
18.17 計算二維點集的凸包和直徑 656
第19章 迭代器和產生器 660
引言 660
19.1 編寫一個類似range的浮點數遞增的函數 663
19.2 從任意可迭代對象建立列表 665
19.3 產生Fibonacci序列 667
19.4 在多重賦值中拆解部分項 669
19.5 自動拆解出需要的數目的項 670
19.6 以步長n將一個可迭代對象切成n片 672
19.7 通過重疊的視窗迴圈序列 674
19.8 並行地迴圈多個可迭代對象 678
19.9 迴圈多個可迭代對象的向量積 680
19.10 逐段讀取文字檔 683
19.11 讀取帶有延續符的行 685
19.12 將一個資料區塊流處理成行流 687
19.13 用產生器從資料庫中抓取大記錄集 688
19.14 合并有序序列 690
19.15 產生排列、組合以及選擇 694
19.16 產生整數的劃分 696
19.17 複製迭代器 697
19.18 迭代器的前瞻 701
19.19 簡化隊列消費者線程 703
19.20 在另一個線程中運行迭代器 705
19.21 用itertools.groupby來計算匯總報告 706
第20章 描述符、裝飾器和元類 710
引言 710
20.1 在函數調用中獲得常新的預設值 712
20.2 用嵌套函數來編寫property屬性 715
20.3 給屬性值起別名 717
20.4 緩衝屬性值 719
20.5 用同一個方法訪問多個屬性 722
20.6 封裝一個方法來給類增加功能 723
20.7 增強所有方法來給類增加功能 726
20.8 在運行時給一個類執行個體添加方法 728
20.9 檢查介面的實現 730
20.10 在自訂元類中正確地使用_ _new_ _和_ _init_ _ 732
20.11 允許對List的可變方法的鏈式調用 734
20.12 通過更緊湊的文法使用協作的超類調用 736
20.13 不使用_ _init_ _來初始化執行個體屬性 738
20.14 執行個體屬性的自動初始化 740
20.15 重新載入時自動更新類執行個體 743
20.16 在編譯時間綁定常量 747
20.17 解決元類衝突 752