python 各模塊學習

 

核心模塊html

 

  • 1.1. 介紹
  • 1.2. _ _builtin_ _ 模塊
  • 1.3. exceptions 模塊
  • 1.4. os 模塊
  • 1.5. os.path 模塊
  • 1.6. stat 模塊
  • 1.7. string 模塊
  • 1.8. re 模塊
  • 1.9. math 模塊
  • 1.10. cmath 模塊
  • 1.11. operator 模塊
  • 1.12. copy 模塊
  • 1.13. sys 模塊
  • 1.14. atexit 模塊
  • 1.15. time 模塊
  • 1.16. types 模塊
  • 1.17. gc 模塊

 

更多標準模塊node

 

  • 2.1. 概覽
  • 2.2. fileinput 模塊
  • 2.3. shutil 模塊
  • 2.4. tempfile 模塊
  • 2.5. StringIO 模塊
  • 2.6. cStringIO 模塊
  • 2.7. mmap 模塊
  • 2.8. UserDict 模塊
  • 2.9. UserList 模塊
  • 2.10. UserString 模塊
  • 2.11. traceback 模塊
  • 2.12. errno 模塊
  • 2.13. getopt 模塊
  • 2.14. getpass 模塊
  • 2.15. glob 模塊
  • 2.16. fnmatch 模塊
  • 2.17. random 模塊
  • 2.18. whrandom 模塊
  • 2.19. md5 模塊
  • 2.20. sha 模塊
  • 2.21. crypt 模塊
  • 2.22. rotor 模塊
  • 2.23. zlib 模塊
  • 2.24. code 模塊

 

線程和進程python

 

  • 3.1. 概覽
  • 3.2. threading 模塊
  • 3.3. Queue 模塊
  • 3.4. thread 模塊
  • 3.5. commands 模塊
  • 3.6. pipes 模塊
  • 3.7. popen2 模塊
  • 3.8. signal 模塊

 

數據表示react

 

  • 4.1. 概覽
  • 4.2. array 模塊
  • 4.3. struct 模塊
  • 4.4. xdrlib 模塊
  • 4.5. marshal 模塊
  • 4.6. pickle 模塊
  • 4.7. cPickle 模塊
  • 4.8. copy_reg 模塊
  • 4.9. pprint 模塊
  • 4.10. repr 模塊
  • 4.11. base64 模塊
  • 4.12. binhex 模塊
  • 4.13. quopri 模塊
  • 4.14. uu 模塊
  • 4.15. binascii 模塊

 

文件格式ios

 

  • 5.1. 概覽
  • 5.2. xmllib 模塊
  • 5.3. xml.parsers.expat 模塊
  • 5.4. sgmllib 模塊
  • 5.5. htmllib 模塊
  • 5.6. htmlentitydefs 模塊
  • 5.7. formatter 模塊
  • 5.8. ConfigParser 模塊
  • 5.9. netrc 模塊
  • 5.10. shlex 模塊
  • 5.11. zipfile 模塊
  • 5.12. gzip 模塊

 

郵件和新聞消息處理git

 

  • 6.1. 概覽
  • 6.2. rfc822 模塊
  • 6.3. mimetools 模塊
  • 6.4. MimeWriter 模塊
  • 6.5. mailbox 模塊
  • 6.6. mailcap 模塊
  • 6.7. mimetypes 模塊
  • 6.8. packmail 模塊
  • 6.9. mimify 模塊
  • 6.10. multifile 模塊

 

網絡協議程序員

 

  • 7.1. 概覽
  • 7.2. socket 模塊
  • 7.3. select 模塊
  • 7.4. asyncore 模塊
  • 7.5. asynchat 模塊
  • 7.6. urllib 模塊
  • 7.7. urlparse 模塊
  • 7.8. cookie 模塊
  • 7.9. robotparser 模塊
  • 7.10. ftplib 模塊
  • 7.11. gopherlib 模塊
  • 7.12. httplib 模塊
  • 7.13. poplib 模塊
  • 7.14. imaplib 模塊
  • 7.15. smtplib 模塊
  • 7.16. telnetlib 模塊
  • 7.17. nntplib 模塊
  • 7.18. SocketServer 模塊
  • 7.19. BaseHTTPServer 模塊
  • 7.20. SimpleHTTPServer 模塊
  • 7.21. CGIHTTPServer 模塊
  • 7.22. cgi 模塊
  • 7.23. webbrowser 模塊

 

國際化web

 

  • 8.1. locale 模塊
  • 8.2. unicodedata 模塊
  • 8.3. ucnhash 模塊

 

多媒體相關模塊正則表達式

 

  • 9.1. 概覽
  • 9.2. imghdr 模塊
  • 9.3. sndhdr 模塊
  • 9.4. whatsound 模塊
  • 9.5. aifc 模塊
  • 9.6. sunau 模塊
  • 9.7. sunaudio 模塊
  • 9.8. wave 模塊
  • 9.9. audiodev 模塊
  • 9.10. winsound 模塊

 

數據儲存算法

 

  • 10.1. 概覽
  • 10.2. anydbm 模塊
  • 10.3. whichdb 模塊
  • 10.4. shelve 模塊
  • 10.5. dbhash 模塊
  • 10.6. dbm 模塊
  • 10.7. dumbdbm 模塊
  • 10.8. gdbm 模塊

 

工具和實用程序

 

  • 11.1. dis 模塊
  • 11.2. pdb 模塊
  • 11.3. bdb 模塊
  • 11.4. profile 模塊
  • 11.5. pstats 模塊
  • 11.6. tabnanny 模塊

 

其餘模塊

 

  • 12.1. 概覽
  • 12.2. fcntl 模塊
  • 12.3. pwd 模塊
  • 12.4. grp 模塊
  • 12.5. nis 模塊
  • 12.6. curses 模塊
  • 12.7. termios 模塊
  • 12.8. tty 模塊
  • 12.9. resource 模塊
  • 12.10. syslog 模塊
  • 12.11. msvcrt 模塊
  • 12.12. nt 模塊
  • 12.13. _winreg 模塊
  • 12.14. posix 模塊

 

執行支持模塊

 

  • 13.1. dospath 模塊
  • 13.2. macpath 模塊
  • 13.3. ntpath 模塊
  • 13.4. posixpath 模塊
  • 13.5. strop 模塊
  • 13.6. imp 模塊
  • 13.7. new 模塊
  • 13.8. pre 模塊
  • 13.9. sre 模塊
  • 13.10. py_compile 模塊
  • 13.11. compileall 模塊
  • 13.12. ihooks 模塊
  • 13.13. linecache 模塊
  • 13.14. macurl2path 模塊
  • 13.15. nturl2path 模塊
  • 13.16. tokenize 模塊
  • 13.17. keyword 模塊
  • 13.18. parser 模塊
  • 13.19. symbol 模塊
  • 13.20. token 模塊

 

其餘模塊

 

  • 14.1. 概覽
  • 14.2. pyclbr 模塊
  • 14.3. filecmp 模塊
  • 14.4. cmd 模塊
  • 14.5. rexec 模塊
  • 14.6. Bastion 模塊
  • 14.7. readline 模塊
  • 14.8. rlcompleter 模塊
  • 14.9. statvfs 模塊
  • 14.10. calendar 模塊
  • 14.11. sched 模塊
  • 14.12. statcache 模塊
  • 14.13. grep 模塊
  • 14.14. dircache 模塊
  • 14.15. dircmp 模塊
  • 14.16. cmp 模塊
  • 14.17. cmpcache 模塊
  • 14.18. util 模塊
  • 14.19. soundex 模塊
  • 14.20. timing 模塊
  • 14.21. posixfile 模塊
  • 14.22. bisect 模塊
  • 14.23. knee 模塊
  • 14.24. tzparse 模塊
  • 14.25. regex 模塊
  • 14.26. regsub 模塊
  • 14.27. reconvert 模塊
  • 14.28. regex_syntax 模塊
  • 14.29. find 模塊

 

  1. Py 2.0 後新增模塊
  2. 後記

 

1. 核心模塊

1.1. 介紹

Python 的標準庫包括了不少的模塊從 Python 語言自身特定的類型和聲明到一些只用於少數程序的不著名的模塊.

1.1.1. 內建函數和異常

下面的這兩個模塊比其餘模塊加在一塊兒還要重要定義內建函數(例如 len, int, range ...) _ _builtin_ _ 模塊以及定義全部內建異常的 exceptions模塊.

Python 在啓動時導入這兩個模塊使任何程序都可以使用它們.

1.1.2. 操做系統接口模塊

Python 有許多使用了 POSIX 標準 API 和標準 語言庫的模塊它們爲底層操做系統提供了平臺獨立的接口.

這類的模塊包括提供文件和進程處理功能的 os 模塊提供平臺獨立的文件名處理 (分拆目錄名文件名後綴等) os.path 模塊以及時間日期處理相關的 time/datetime 模塊.

[!Feather注: datetime 爲 Py2.3 新增模塊, 提供加強的時間處理方法 ]

延伸一點說網絡和線程模塊一樣也能夠歸爲這一個類型不過 Python 並無在全部的平臺/版本實現這些.

1.1.3. 類型支持模塊

標準庫裏有許多用於支持內建類型操做的庫. string 模塊實現了經常使用的字符串處理math 模塊提供了數學計算操做和常量(pi, e都屬於這類常量), cmath模塊爲複數提供了和 math 同樣的功能.

1.1.4. 正則表達式

re 模塊爲 Python 提供了正則表達式支持正則表達式是用於匹配字符串或特定子字符串的 有特定語法的字符串模式.

1.1.5. 語言支持模塊

sys 模塊可讓你訪問解釋器相關參數,好比模塊搜索路徑,解釋器版本號等operator 模塊提供了和內建操做符做用相同的函數copy 模塊容許 你複製對象, Python 2.0 新加入的 gc 模塊提供了對垃圾收集的相關控制功能.

 

1.2. _ _builtin_ _ 模塊

這個模塊包含 Python 中使用的內建函數通常不用手動導入這個模塊; Python會幫你作好一切.

1.2.1. 使用元組或字典中的參數調用函數

Python容許你實時地建立函數參數列表只要把全部的參數放入一個元組中, 而後經過內建的 apply 函數調用函數

要想把關鍵字參數傳遞給一個函數你能夠將一個字典做爲 apply 函數的第 個參數

apply 函數的一個常見用法是把構造函數參數從子類傳遞到基類尤爲是構造函數須要接受不少參數的時候

Python 2.0 提供了另個方法來作相同的事你只須要使用一個傳統的函數調用 使用 來標記元組** 來標記字典.

下面兩個語句是等價的:

result = function(*args, **kwargs) result = apply(function, args, kwargs)

1.2.2. 加載和重載模塊

若是你寫過較龐大的 Python 程序那麼你就應該知道 import 語句是用來導入外部模塊的 (固然也可使用 from-import 版本). 不過你可能不知道import 實際上是靠調用內建 函數 _ _import_ _ 來工做的.

經過這個戲法你能夠動態地調用函數當你只知道模塊名稱(字符串)的時候這將很方便Example 1-4 展現了這種用法動態地導入全部以 "-plugin" 結尾的模塊.

注意,當你重加載模塊時它會被從新編譯新的模塊會代替模塊字典裏的老模塊可是已經用原模塊裏的類創建的實例仍然使用的是老模塊(不會被更新).

一樣地使用 from-import 直接建立的到模塊內容的引用也是不會被更新的.

1.2.3. 關於名稱空間

dir 返回由給定模塊實例或其餘類型的全部成員組成的列表這可能在交互式 Python 解釋器下頗有用也能夠用在其餘地方. .

getmembers 函數返回了一個有序列表成員在列表中名稱出現的越早它所處的類層次就越高若是無所謂順序的話你可使用字典代替列表.vars 函數與此類似它返回的是包含每一個成員當前值的字典若是你使用不帶參數的 vars , 它將返回當前局部名稱空間的可見元素( locals() 函數 ). 

1.2.4. 檢查對象類型

Python 是一種動態類型語言這意味着給一個定變量名能夠在不一樣的場合綁定到不一樣的類型上在接下面例子中一樣的函數分別被整數浮點數以及一個字符串調用:

你能夠在 operator 模塊中找到檢查對象是否爲某一內建類型(數字序列或者字典等的函數可是由於建立一個類很簡單(好比實現基本序列方法的類), 因此對這些 類型使用顯式的類型判斷並非好主意.

在處理類和實例的時候會複雜些. Python 不會把類做爲本質上的類型對待相反地全部的類都屬於一個特殊的類類型(special class type), 全部的類實例屬於一個特殊的實例類型(special instance type).

這意味着你不能使用 type 函數來測試一個實例是否屬於一個給定的類全部的實例都是一樣 的類型爲了解決這個問題你可使用 isinstance 函數,它會檢查一個對象是 不是給定類(或其子類)的實例

1.2.5. 計算 Python 表達式

Python 提供了在程序中與解釋器交互的多種方法例如 eval 函數將一個字符串做爲 Python 表達式求值你能夠傳遞一串文本簡單的表達式或者使用 內建 Python 函數

1.2.6. 編譯和執行代碼

eval 函數只針對簡單的表達式若是要處理大塊的代碼你應該使用 compile  exec 函數 

1.2.7. 從 _ _builtin_ _ 模塊重載函數

由於 Python 在檢查局部名稱空間和模塊名稱空間前不會檢查內建函數因此有時候你可能要顯式地引用 _ _builtin_ _ 模塊例如 Example 1-25 重載了內建的 open 函數這時候要想使用原來的 open 函數就須要腳本顯式地指明模塊名稱.

1.3. exceptions 模塊

exceptions 模塊提供了標準異常的層次結構. Python 啓動的時候會自動導入這個模塊而且將它加入到 _ _builtin_ _ 模塊中也就是說通常不須要手動導入這個模塊.

該模塊定義瞭如下標準異常:

  • Exception 是全部異常的基類強烈建議(但不是必須)自定義的異常異常也繼承這個類.
  • SystemExit(Exception)  sys.exit 函數引起若是它在最頂層沒有被 try-except 語句捕獲那麼解釋器將直接關閉而不會顯示任何跟蹤返回信息.
  • StandardError(Exception) 是全部內建異常的基類( SystemExit ).
  • KeyboardInterrupt(StandardError) 在用戶按下 Control-C(或其餘打斷按鍵)後 被引起若是它可能會在你使用 "捕獲全部 try-except 語句時致使奇怪的問題.
  • ImportError(StandardError) 在 Python 導入模塊失敗時被引起.
  • EnvironmentError 做爲全部解釋器環境引起異常的基類. (也就是說這些異常通常不是因爲程序 bug 引發).
  • IOError(EnvironmentError) 用於標記 I/O 相關錯誤.
  • OSError(EnvironmentError) 用於標記 os 模塊引發的錯誤.
  • WindowsError(OSError) 用於標記 os 模塊中 Windows 相關錯誤.
  • NameError(StandardError) 在 Python 查找全局或局部名稱失敗時被引起.
  • UnboundLocalError(NameError) , 當一個局部變量尚未賦值就被使用時會引起這個異常這個異常只有在2.0及以後的版本有早期版本只會引起一個普通的 NameError .
  • AttributeError(StandardError) , 當 Python 尋找(或賦值)給一個實例屬性方法模塊功能或其它有效的命名失敗時會引起這個異常.
  • SyntaxError(StandardError) , 當解釋器在編譯時遇到語法錯誤這個異常就被引起.
  • (2.0 及之後版本IndentationError(SyntaxError) 在遇到非法的縮進時被引起該異常只用於 2.0 及之後版本以前版本會引起一個 SyntaxError 異常.
  • (2.0 及之後版本TabError(IndentationError) , 當使用 -tt 選項檢查不一致縮進時有可能被引起該異常只用於 2.0 及之後版本以前版本會引起一個SyntaxError 異常.
  • TypeError(StandardError) , 當給定類型的對象不支持一個操做時被引起.
  • AssertionError(StandardError)  assert 語句失敗時被引起(即表達式爲 false ).
  • LookupError(StandardError) 做爲序列或字典沒有包含給定索引或鍵時所引起異常的基類.
  • IndexError(LookupError) , 當序列對象使用給定索引數索引失敗時(不存在索引對應對象)引起該異常.
  • KeyError(LookupError) 當字典對象使用給定索引索引失敗時(不存在索引對應對象)引起該異常.
  • ArithmeticError(StandardError) 做爲數學計算相關異常的基類.
  • OverflowError(ArithmeticError) 在操做溢出時被引起(例如當一個整數太大致使不能符合給定類型).
  • ZeroDivisionError(ArithmeticError) , 當你嘗試用 除某個數時被引起.
  • FloatingPointError(ArithmeticError) , 當浮點數操做失敗時被引起.
  • ValueError(StandardError) , 當一個參數類型正確但值不合法時被引起.
  • (2.0 及之後版本UnicodeError(ValueError) , Unicode 字符串類型相關異常只使用在 2.0 及之後版本.
  • RuntimeError(StandardError) , 當出現運行時問題時引起包括在限制模式下嘗試訪問外部內容未知的硬件問題等等.
  • NotImplementedError(RuntimeError) , 用於標記未實現的函數或無效的方法.
  • SystemError(StandardError) , 解釋器內部錯誤該異常值會包含更多的細節 (常常會是一些深層次的東西好比 "eval_code2: NULL globals" ). 這本書的做者編了 年程序都沒見過這個錯誤. (想必是沒有用 raise SystemError).
  • MemoryError(StandardError) , 當解釋器耗盡內存時會引起該異常注意只有在底層內存分配抱怨時這個異常纔會發生若是是在你的舊機器上這個異常發生以前系統會陷入混亂的內存交換中.

你能夠建立本身的異常類只須要繼承內建的 Exception (或者它的任意一個合適的子類)便可有須要時能夠再重載它的 _ _str_ _ 方法

1.4. os 模塊

這個模塊中的大部分函數經過對應平臺相關模塊實現好比 posix  nt. os 模塊會在第一次導入的時候自動加載合適的執行模塊.

1.4.1. 處理文件

內建的 open / file 函數用於建立打開和編輯文件 os 模塊提供了重命名和刪除文件所需的函數.

1.4.2. 處理目錄

os 模塊也包含了一些用於目錄處理的函數.

listdir 函數返回給定目錄中全部文件名(包括目錄名)組成的列表而 Unix 和 Windows 中使用的當前目錄和父目錄標記(. 和 .. )不包含在此列表中.

makedirs  removedirs 函數用於建立或刪除目錄層,

removedirs 函數會刪除所給路徑中最後一個目錄下全部的空目錄 mkdir  rmdir 函數只能處理單個目錄級

若是須要刪除非空目錄你可使用 shutil 模塊中的 rmtree 函數.

1.4.3. 處理文件屬性

stat 函數能夠用來獲取一個存在文件的信息,. 它返回一個類元組對象(stat_result對象包含 10 個元素), 依次是st_mode (權限模式), st_ino (inode number), st_dev (device), st_nlink (number of hard links), st_uid (全部者用戶 ID), st_gid (全部者所在組 ID ), st_size (文件大小字節), st_atime (最近一次訪問時間), st_mtime (最近修改時間), st_ctime (平臺相關; Unix下的最近一次元數據/metadata修改時間或者 Windows 下的建立時間) - 以上項目也可做爲屬性訪問.

stat 模塊包含了不少能夠處理該返回對象的常量及函數下面的代碼展現了其中的一些.

可使用 chmod  utime 函數修改文件的權限模式和時間屬性

1.4.4. 處理進程

system 函數在當前進程下執行一個新命令並等待它完成,.

exec 函數會使用新進程替換當前進程(或者說是"轉到進程").  Example 1-35 字符串 "goodbye" 永遠不會被打印.

Python 提供了不少表現不一樣的 exec 函數Example 1-35 使用的是 execvp 函數它會從標準路徑搜索執行程序把第二個參數(元組)做爲單獨的參數傳遞給程序並使用當前的環境變量來運行程序其餘七個同類型函數請參閱 Python Library Reference .

在 Unix 環境下你能夠經過組合使用 exec , fork 以及 wait 函數來從當前程序調用另外一個程序fork 函數複製當前進程wait函數會等待一個子進程執行結束.

fork 函數在子進程返回中返回 0 (這個進程首先從 fork 返回值), 在父進程中返回一個非 的進程標識符(子進程的 PID ). 也就是說只有當咱們處於子進程的時候 "not pid" 才爲真.

fork  wait 函數在 Windows 上是不可用的可是你可使用 spawn 函數, . 不過spawn 不會沿着路徑搜索可執行文件你必須本身處理好這些.

spawn 函數還可用於在後臺運行一個程序Example 1-38  run 函數添加了一個可選的 mode 參數當設置爲 os.P_NOWAIT 這個腳本不會等待子程序結束默認值 os.P_WAIT  spawn 會等待子進程結束.

其它的標誌常量還有 os.P_OVERLAY ,它使得 spawn 的行爲和 exec 相似以及 os.P_DETACH , 它在後臺運行子進程與當前控制檯和鍵盤焦點隔離.

1.4.5. 處理守護進程(Daemon Processes)

Unix 系統中你可使用 fork 函數把當前進程轉入後臺(一個"守護者/daemon"). 通常來講你須要派生(fork off)一個當前進程的副本而後終止原進程

os.setpgrp()

爲了確保守護進程建立的文件可以得到程序指定的 mode flags(權限模式標記?), 最好刪除 user mode mask:

os.umask(0)

而後你應該重定向 stdout/stderr 文件而不能只是簡單地關閉它們(若是你的程序須要 stdout  stderr 寫入內容的時候可能會出現意想不到的問題).

class NullDevice: def write(self, s): pass sys.stdin.close() sys.stdout = NullDevice() sys.stderr = NullDevice()

換言之因爲 Python  print 和 中的 printf/fprintf 在設備(device) 沒有鏈接後不會關閉你的程序此時守護進程中的 sys.stdout.write() 會拋出一個 IOError 異常而你的程序依然在後臺運行的很好....

另外先前例子中的 _exit 函數會終止當前進程 sys.exit 不一樣若是調用者(caller) 捕獲了 SystemExit 異常程序仍然會繼續執行. .

 

1.5. os.path 模塊

os.path 模塊包含了各類處理長文件名(路徑名)的函數先導入 (import) os 模塊而後就能夠以 os.path 訪問該模塊.

1.5.1. 處理文件名

os.path 模塊包含了許多與平臺無關的處理長文件名的函數也就是說你不須要處理先後斜槓冒號等.

注意這裏的 split 只分割出最後一項(不帶斜槓).

os.path 模塊中還有許多函數容許你簡單快速地獲知文件名的一些特徵

expanduser 函數以與大部分Unix shell相同的方式處理用戶名快捷符號(~, 不過在 Windows 下工做不正常),

1.5.2. 搜索文件系統

walk 函數會幫你找出一個目錄樹下的全部文件 ( Example 1-46 所示). 它的參數依次是目錄名回調函數以及傳遞給回調函數的數據對象.

walk 函數的接口多少有點晦澀 (也許只是對我我的而言我老是記不住參數的順序). Example 1-47 中展現的 index 函數會返回一個文件名列表你能夠直接使用 for-in 循環處理文件.

若是你不想列出全部的文件 (基於性能或者是內存的考慮) , Example 1-48 展現了另外一種方法這裏 DirectoryWalker 類的行爲與序列對象類似一次返回一個文件. (generator?)

注意 DirectoryWalker 類並不檢查傳遞給 _ _getitem_ _ 方法的索引值這意味着若是你越界訪問序列成員(索引數字過大)的話這個類將不能正常工做.

最後若是你須要處理文件大小和時間戳Example 1-49 給出了一個類它返回文件名和它的 os.stat 屬性(一個元組). 這個版本在每一個文件上都能節省一次或兩次 stat 調用os.path.isdir  os.path.islink 內部都使用了 stat ), 而且在一些平臺上運行很快.

 

1.6. stat 模塊

Example 1-50 展現了 stat 模塊的基本用法這個模塊包含了一些 os.stat 函數中可用的常量和測試函數.

 

1.7. string 模塊

string 模塊提供了一些用於處理字符串類型的函數.

大多數狀況下 (特別是當你使用的是1.6及更高版本時,你可使用 int  float 函數代替 string 模塊中對應的函數。

atoi 函數能夠接受可選的第二個參數指定數基(number base). 若是數基爲 0, 那麼函數將檢查字符串的前幾個字符來決定使用的數基若是爲 "0x," 數基將爲 16 (十六進制), 若是爲 "0," 則數基爲 8 (八進制). 默認數基值爲 10 (十進制), 當你未傳遞參數時就使用這個值.

在 1.6 及之後版本中int 函數和 atoi 同樣能夠接受第二個參數與字符串版本函數不同的是 int  float 能夠接受 Unicode 字符串對象.

 

1.8. re 模塊

re 模塊提供了一系列功能強大的正則表達式 (regular expression) 工具它們容許你快速檢查給定字符串是否與給定的模式匹配 (使用 match 函數), 或者包含這個模式 (使用 search 函數). 正則表達式是以緊湊(也很神祕)的語法寫出的字符串模式.

match 嘗試從字符串的起始匹配一個模式, . 若是模式匹配了某些內容 (包括空字符串若是模式容許的話) , 它將返回一個匹配對象使用它的 group 方法能夠找出匹配的內容.

search 函數會在字符串內查找模式匹配,. 它在全部可能的字符位置嘗試匹配模式從最左邊開始一旦找到匹配就返回一個匹配對象若是沒有找到相應的匹配就返回 None .

你也能夠經過回調 (callback) 函數使用 sub 來替換指定模式

 

1.9. math 模塊

math 模塊實現了許多對浮點數的數學運算函數這些函數通常是對平臺 庫中同名函數的簡單封裝因此通常狀況下不一樣平臺下計算的結果可能稍微地有所不一樣有時候甚至有很大出入

 

1.10. cmath 模塊

cmath 模塊包含了一些用於複數運算的函數.

 

1.11. operator 模塊

operator 模塊爲 Python 提供了一個 "功能性的標準操做符接口當使用 map 以及 filter 一類的函數的時候operator 模塊中的函數能夠替換一些lambda 函式並且這些函數在一些喜歡寫晦澀代碼的程序員中很流行

這裏須要注意 operator 模塊使用很是規的方法處理對象實例因此使用 isNumberType , isMappingType , 以及 isSequenceType 函數的時候要當心這很容易下降代碼的擴展性.

一樣須要注意的是一個字符串序列成員 (單個字符也是序列因此當在遞歸函數使用 isSequenceType 來截斷對象樹的時候別把普通字符串做爲參數(或者是任何包含字符串的序列對象).

 

1.12. copy 模塊

copy 模塊包含兩個函數用來拷貝對象

copy(object) => object 建立給定對象的 "/淺層(shallow)" 拷貝(copy). 這裏 "/淺層(shallow)" 的意思是複製對象自己但當對象是一個容器 (container) 它的成員仍然指向原來的成員對象.

 

1.13. sys 模塊

sys 模塊提供了許多函數和變量來處理 Python 運行時環境的不一樣部分.

1.13.1. 處理命令行參數

在解釋器啓動後argv 列表包含了傳遞給腳本的全部參數列表的第一個元素爲腳本自身的名稱.

若是是從標準輸入讀入腳本 (好比 "python < sys-argv-example-1.py"), 腳本的名稱將被設置爲空串若是把腳本做爲字符串傳遞給python (使用 -c選項), 腳本名會被設置爲 "-c".

1.13.2. 處理模塊

path 列表是一個由目錄名構成的列表, Python 從中查找擴展模塊( Python 源模塊編譯模塊,或者二進制擴展). 啓動 Python ,這個列表從根據內建規則, PYTHONPATH 環境變量的內容以及註冊表( Windows 系統)等進行初始化因爲它只是一個普通的列表你能夠在程序中對它進行操做

modules 字典包含全部加載的模塊import 語句在從磁盤導入內容以前會先檢查這個字典.

1.13.3. 處理引用記數

getrefcount 函數  返回給定對象的引用記數 也就是這個對象使用次數. Python 會跟蹤這個值當它減小爲0的時候就銷燬這個對象.

1.13.4. 跟蹤程序

setprofiler 函數容許你配置一個分析函數(profiling function). 這個函數會在每次調用某個函數或方法時被調用(明確或隱含的), 或是遇到異常的時候被調用基於該函數profile 模塊提供了一個完整的分析器框架.

Example 1-73 中的 settrace 函數與此相似可是 trace 函數會在解釋器每執行到新的一行時被調用.

基於該函數提供的跟蹤功能pdb 模塊提供了完整的調試( debug )框架.

1.13.5. 處理標準輸出/輸入

stdin , stdout , 以及 stderr 變量包含與標準 I/O 流對應的流對象若是須要更好地控制輸出, print 不能知足你的要求它們就是你所須要的你也能夠 替換 它們這時候你就能夠重定向輸出和輸入到其它設備( device ), 或者以非標準的方式處理它們

1.13.6. 退出程序

執行至主程序的末尾時,解釋器會自動退出可是若是須要中途退出程序你能夠調用 sys.exit 函數它帶有一個可選的整數參數返回給調用它的程序.在 Python 2.0 之後你可使用 atexit 模塊來註冊多個退出處理函數.

 

1.14. atexit 模塊

(用於2.0版本及以上atexit 模塊容許你註冊一個或多個終止函數(暫且這麼叫), 這些函數將在解釋器終止前被自動調用.

調用 register 函數即可以將函數註冊爲終止函數你也能夠添加更多的參數這些將做爲 exit 函數的參數傳遞.

該模塊實際上是一個對 sys.exitfunc 鉤子( hook )的簡單封裝.

 

1.15. time 模塊

time 模塊提供了一些處理日期和一天內時間的函數它是創建在 運行時庫的簡單封裝.

給定的日期和時間能夠被表示爲浮點型(從參考時間一般是 1970.1.1 到如今通過的秒數即 Unix 格式), 或者一個表示時間的 struct (類元組).

1.15.1. 得到當前時間

localtime  gmtime 返回的類元組包括年星期一年的第幾天日光標誌其中年是一個四位數(在有千年蟲問題的平臺上另有規定但仍是四位數), 星期從星期一(數字 表明)開始, 11日是一年的第一天.

1.15.2. 將時間值轉換爲字符串

你可使用標準的格式化字符串把時間對象轉換爲字符串不過 time 模塊已經提供了許多標準轉換函數

1.15.3. 將字符串轉換爲時間對象

在一些平臺上time 模塊包含了 strptime 函數它的做用與 strftime 相反給定一個字符串和模式它返回相應的時間對象

只有在系統的 庫提供了相應的函數的時候time.strptime 函數纔可使用對於沒有提供標準實現的平臺

1.15.4. 轉換時間值

將時間元組轉換回時間值很是簡單至少咱們談論的當地時間 (local time) 如此只要把時間元組傳遞給 mktime 函數

可是, 1.5.2 版本的標準庫沒有提供能將 UTC 時間 (Universal Time, Coordinated: 特林威治標準時間)轉換爲時間值的函數 ( Python 和對應底層 庫都沒有提供). Example 1-84 提供了該函數的一個 Python 實現稱爲 timegm .

從 1.6 版本開始calendar 模塊提供了一個相似的函數 calendar.timegm .

1.15.5. Timing 相關

time 模塊能夠計算 Python 程序的執行時間你能夠測量 "wall time" (real world time), 或是"進程時間" (消耗的 CPU 時間).

並非全部的系統都能測量真實的進程時間一些系統中(包括 Windows ), clock 函數一般測量從程序啓動到測量時的 wall time.

進程時間的精度受限制在一些系統中它超過 30 分鐘後進程會被清理. (原文: On many systems, it wraps around after just over 30 minutes.)

另參見 timing 模塊( Windows 下的朋友不用忙活了,沒有地~), 它能夠測量兩個事件之間的 wall time.

 

1.16. types 模塊

types 模塊包含了標準解釋器定義的全部類型的類型對象同一類型的全部對象共享一個類型對象你可使用 is 來檢查一個對象是否是屬於某個給定類型.

注意全部的類都具備相同的類型全部的實例也是同樣要測試一個類或者實例所屬的類可使用內建的 issubclass  isinstance 函數.

types 模塊在第一次引入的時候會破壞當前的異常狀態也就是說不要在異常處理語句塊中導入該模塊 (或其餘會導入它的模塊) .

 

1.17. gc 模塊

(可選, 2.0 及之後版本gc 模塊提供了到內建循環垃圾收集器的接口.

Python 使用引用記數來跟蹤何時銷燬一個對象一個對象的最後一個引用一旦消失這個對象就會被銷燬.

從 2.0 版開始, Python 還提供了一個循環垃圾收集器它每隔一段時間執行這個收集器查找指向自身的數據結構並嘗試破壞循環

你可使用 gc.collect 函數來強制完整收集這個函數將返回收集器銷燬的對象的數量.

若是你肯定你的程序不會建立自引用的數據結構你可使用 gc.disable 函數禁用垃圾收集調用這個函數之後, Python 的工做方式將與 1.5.2 或更早的版本相同.

 

2. 更多標準模塊

"Now, imagine that your friend kept complaining that she didn't want to visit you since she found it too hard to climb up the drain pipe, and you kept telling her to use the friggin' stairs like everyone else..."

- eff-bot, June 1998

 

2.1. 概覽

本章敘述了許多在 Python 程序中普遍使用的模塊固然在大型的 Python 程序中不使用這些模塊也是能夠的但若是使用會節省你很多時間.

2.1.1. 文件與流

fileinput 模塊可讓你更簡單地向不一樣的文件寫入內容該模塊提供了一個簡單的封裝類一個簡單的 for-in 語句就能夠循環獲得一個或多個文本文件的內容.

StringIO 模塊 (以及 cStringIO 模塊做爲一個的變種實現了一個工做在內存的文件對象你能夠在不少地方用 StringIO 對象替換普通的文件對象.

2.1.2. 類型封裝

UserDict , UserList , 以及 UserString 是對應內建類型的頂層簡單封裝和內建類型不一樣的是這些封裝是能夠被繼承的這在你須要一個和內建類型行爲類似但由額外新方法的類的時候頗有用.

2.1.3. 隨機數字

random 模塊提供了一些不一樣的隨機數字生成器whrandom 模塊與此類似但容許你建立多個生成器對象.

[!Feather 注: whrandom 在版本 2.1 時聲明不支持. 請使用 random 替代.]

2.1.4. 加密算法

md5  sha 模塊用於計算密寫的信息標記( cryptographically strong message signatures , 所謂的 "message digests", 信息摘要).

crypt 模塊實現了 DES 樣式的單向加密該模塊只在 Unix 系統下可用.

rotor 模塊提供了簡單的雙向加密版本 2.4 之後的朋友能夠不用忙活了.

[!Feather 注: 它在版本 2.3 時申明不支持, 由於它的加密運算不安全.]

 

2.2. fileinput 模塊

fileinput 模塊容許你循環一個或多個文本文件的內容

你也可使用 fileinput 模塊得到當前行的元信息 (meta information). 其中包括 isfirstline , filename , lineno ,

文本文件的替換操做很簡單只須要把 inplace 關鍵字參數設置爲 1 , 傳遞給 input 函數該模塊會幫你作好一切

 

2.3. shutil 模塊

shutil 實用模塊包含了一些用於複製文件和文件夾的函數使用的 copy 函數使用和 Unix  cp 命令基本相同的方式複製一個文件.

copytree 函數用於複製整個目錄樹 ( cp -r 相同),  rmtree 函數用於刪除整個目錄樹 ( rm -r ). 

 

2.4. tempfile 模塊

 tempfile 模塊容許你快速地建立名稱惟一的臨時文件供使用.

TemporaryFile 函數會自動挑選合適的文件名並打開文件, . 並且它會確保該文件在關閉的時候會被刪除. (在 Unix 你能夠刪除一個已打開的文件這 時文件關閉時它會被自動刪除在其餘平臺上這經過一個特殊的封裝類實現.)

 

2.5. StringIO 模塊

Example 2-8 展現了 StringIO 模塊的使用它實現了一個工做在內存的文件對象 (內存文件). 在大多須要標準文件對象的地方均可以使用它來替換.

StringIO 類實現了內建文件對象的全部方法此外還有 getvalue 方法用來返回它內部的字符串值

StringIO 能夠用於從新定向 Python 解釋器的輸出

 

2.6. cStringIO 模塊

cStringIO 是一個可選的模塊 StringIO 的更快速實現它的工做方式和 StringIO 基本相同可是它不能夠被繼承Example 2-11 展現了cStringIO 的用法另參考前一節.

爲了讓你的代碼儘量快但同時保證兼容低版本的 Python ,你可使用一個小技巧在 cStringIO 不可用時啓用 StringIO 模塊

 

2.7. mmap 模塊

(2.0 新增mmap 模塊提供了操做系統內存映射函數的接口,  映射區域的行爲和字符串對象相似但數據是直接從文件讀取的.

在 Windows 這個文件必須以既可讀又可寫的模式打開( `r+` , `w+` , 或 `a+` ), 不然 mmap 調用會失敗.

[!Feather 注: 經本人測試, a+ 模式是徹底能夠的, 原文只有 r+ 和 w+]

 

2.8. UserDict 模塊

UserDict 模塊包含了一個可繼承的字典類 (事實上是對內建字典類型的 Python 封裝).

Example 2-15 展現了一個加強的字典類容許對字典使用 "/+" 操做並提供了接受關鍵字參數的構造函數.

 

2.9. UserList 模塊

UserList 模塊包含了一個可繼承的列表類 (事實上是對內建列表類型的 Python 封裝).

AutoList 實例相似一個普通的列表對象但它容許你經過賦值爲列表添加項目.

 

2.10. UserString 模塊

(2.0 新增UserString 模塊包含兩個類UserString  MutableString . 前者是對標準字符串類型的封裝後者是一個變種容許你修改特定位置的字符(聯想下列表就知道了).

注意 MutableString 並非效率很好許多操做是經過切片和字符串鏈接實現的若是性能很對你的腳原本說重要的話你最好使用字符串片段的列表或者array 模塊

 

2.11. traceback 模塊

 traceback 模塊容許你在程序裏打印異常的跟蹤返回 (Traceback)信息相似未捕獲異常時解釋器所作的

 

2.12. errno 模塊

errno 模塊定義了許多的符號錯誤碼好比 ENOENT ("沒有該目錄入口") 以及 EPERM ("權限被拒絕"). 它還提供了一個映射到對應平臺數字錯誤代碼的字典.

在大多狀況下IOError 異常會提供一個二元元組包含對應數值錯誤代碼和一個說明字符串若是你須要區分不一樣的錯誤代碼那麼最好在可能的地方使用符號名稱.

 

2.13. getopt 模塊

getopt 模塊包含用於抽出命令行選項和參數的函數它能夠處理多種格式的選項

其中第 個參數指定了容許的可縮寫的選項選項名後的冒號(:) 意味這這個選項必須有額外的參數.

爲了讓 getopt 查找長的選項,, 傳遞一個描述選項的列表作爲第 個參數若是一個選項名稱以等號(=) 結尾那麼它必須有一個附加參數.

 

2.14. getpass 模塊

getpass 模塊提供了平臺無關的在命令行下輸入密碼的方法

getpass(prompt) 會顯示提示字符串關閉鍵盤的屏幕反饋而後讀取密碼若是提示參數省略那麼它將打印出 "Password:".

getuser() 得到當前用戶名若是可能的話.

 

2.15. glob 模塊

glob 根據給定模式生成知足該模式的文件名列表和 Unix shell 相同.

這裏的模式和正則表達式相似但更簡單星號(*) 匹配零個或更多個字符問號(?) 匹配單個字符你也可使用方括號來指定字符範圍例如 [0-9] 表明一個數字其餘全部字符都表明它們自己.

glob(pattern) 返回知足給定模式的全部文件的列表Example 2-26 展現了它的用法.

注意這裏的 glob 返回完整路徑名這點和 os.listdir 函數不一樣glob 事實上使用了 fnmatch 模塊來完成模式匹配.

 

2.16. fnmatch 模塊

fnmatch 模塊使用模式來匹配文件名

模式語法和 Unix shell 中所使用的相同星號(*) 匹配零個或更多個字符問號(?) 匹配單個字符你也可使用方括號來指定字符範圍例如 [0-9] 表明一個數字其餘全部字符都匹配它們自己.

Example 2-28 中的 translate 函數能夠將一個文件匹配模式轉換爲正則表達式.

glob  find 模塊在內部使用 fnmatch 模塊來實現.

 

2.17. random 模塊

"Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."

- John von Neumann, 1951

random 模塊包含許多隨機數生成器.

基本隨機數生成器(基於 Wichmann 和 Hill , 1982 的數學運算理論能夠經過不少方法訪問 Example 2-29 所示.

注意這裏的 randint 函數能夠返回上界而其餘函數老是返回小於上界的值全部函數都有可能返回下界值.

Example 2-30 展現了 choice 函數它用來從一個序列裏分揀出一個隨機項目它能夠用於列表元組以及其餘序列(固然非空的).

在 2.0 及之後版本shuffle 函數能夠用於打亂一個列表的內容 (也就是生成一個該列表的隨機全排列). Example 2-31 展現瞭如何在舊版本中實現該函數.

random 模塊也包含了非恆定分佈的隨機生成器函數Example 2-32 使用了 gauss (高斯)函數來生成知足高斯分的布隨機數字.

你能夠在 Python Library Reference 找到更多關於非恆定分佈隨機生成器函數的信息.

標準庫中提供的隨機數生成器都是僞隨機數生成器不過這對於不少目的來講已經足夠了好比模擬數值分析以及遊戲能夠肯定的是它不適合密碼學用途.

 

2.18. whrandom 模塊

這個模塊早在 2.1 就被聲明不同意早廢了請使用 random 代替
- Feather

Example 2-33 展現了 whrandom , 它提供了一個僞隨機數生成器. (基於 Wichmann 和 Hill, 1982 的數學運算理論). 除非你須要不共享狀態的多個生成器(如多線程程序), 請使用 random 模塊代替.

 

2.19. md5 模塊

md5 (Message-Digest Algorithm 5)模塊用於計算信息密文(信息摘要).

md5 算法計算一個強壯的128位密文這意味着若是兩個字符串是不一樣的那麼有極高可能它們的 md5 也不一樣也就是說給定一個 md5 密文那麼幾乎沒有可能再找到另個字符串的密文與此相同Example 2-35 展現瞭如何使用 md5 模塊.

千萬別忘記內建的僞隨機生成器對於加密操做而言並不合適千萬當心.

 

2.20. sha 模塊

sha 模塊提供了計算信息摘要(密文)的另種方法 Example 2-39 所示它與 md5 模塊相似但生成的是 160 位簽名.

 

2.21. crypt 模塊

(可選只用於 Unix) crypt 模塊實現了單向的 DES 加密, Unix 系統使用這個加密算法來儲存密碼這個模塊真正也就只在檢查這樣的密碼時有用.

Example 2-40 展現瞭如何使用 crypt.crypt 來加密一個密碼將密碼和 salt 組合起來而後傳遞給函數這裏的 salt 包含兩位隨機字符如今你能夠扔掉原密碼而只保存加密後的字符串了.

確認密碼時只須要用新密碼調用加密函數並取加密後字符串的前兩位做爲 salt 便可如 果結果和加密後字符串匹配那麼密碼就是正確的Example 2-41使用 pwd 模塊來獲取已知用戶的加密後密碼.

 

2.22. rotor 模塊

這個模塊在 2.3 時被聲明不同意, 2.4 時廢了由於它的加密算法不安全
- Feather

(可選rotor 模塊實現了一個簡單的加密算法 Example 2-42 所示它的算法基於 WWII Enigma engine.

 

2.23. zlib 模塊

(可選zlib 模塊爲 "zlib" 壓縮提供支持. (這種壓縮方法是 "deflate".)

Example 2-43 展現瞭如何使用 compress  decompress 函數接受字符串參數.

 

2.24. code 模塊

code 模塊提供了一些用於模擬標準交互解釋器行爲的函數.

compile_command 與內建 compile 函數行爲類似但它會經過測試來保證你傳遞的是一個完成的 Python 語句.

 Example 2-47 咱們一行一行地編譯一個程序編譯完成後會執行所獲得的代碼對象 (code object). 程序代碼以下:

a = ( 1, 2, 3 ) print a

注意只有咱們到達第 個括號元組的賦值操做能編譯完成.

InteractiveConsole 類實現了一個交互控制檯相似你啓動的 Python 解釋器交互模式.

控制檯能夠是活動的(自動調用函數到達下一行或是被動的(當有新數據時調用 push 方法). 默認使用內建的 raw_input 函數若是你想使用另個輸入函數你可使用相同的名稱重載這個方法Example 2-48 展現瞭如何使用 code 模塊來模擬交互解釋器.

 

3. 線程和進程

"Well, since you last asked us to stop, this thread has moved from discussing languages suitable for professional programmers via accidental users to computer-phobic users. A few more iterations can make this thread really interesting..."

- eff-bot, June 1996

 

3.1. 概覽

本章將介紹標準 Python 解釋器中所提供的線程支持模塊注意線程支持模塊是可選的有可能在一些 Python 解釋器中不可用.

本章還涵蓋了一些 Unix 和 Windows 下用於執行外部進程的模塊.

3.1.1. 線程

執行 Python 程序的時候是按照從主模塊頂端向下執行的循環用於重複執行部分代碼函數和方法會將控制臨時移交到程序的另外一部分.

經過線程你的程序能夠在同時處理多個任務每一個線程都有它本身的控制流因此你能夠在一個線程裏從文件讀取數據另個向屏幕輸出內容.

爲了保證兩個線程能夠同時訪問相同的內部數據, Python 使用了 global interpreter lock (全局解釋器鎖)在同一時間只可能有一個線程執行 Python 代碼; Python 其實是自動地在一段很短的時間後切換到下個線程執行或者等待 一個線程執行一項須要時間的操做(例如等待經過 socket 傳輸的數據或是從文件中讀取數據).

全局鎖事實上並不能避免你程序中的問題多個線程嘗試訪問相同的數據會致使異常 狀態例如如下的代碼:

def getitem(key): item = cache.get(key) if item is None: # not in cache; create a new one item = create_new_item(key) cache[key] = item return item

若是不一樣的線程前後使用相同的 key 調用這裏的 getitem 方法那麼它們極可能會致使相同的參數調用兩次 create_new_item . 大多時候這樣作沒有問題但在某些時候會致使嚴重錯誤.

不過你可使用 lock objects 來同步線程一個線程只能擁有一個 lock object , 這樣就能夠確保某個時刻 只有一個線程執行 getitem 函數.

3.1.2. 進程

在大多現代操做系統中每一個程序在它自身的進程( process )內執行咱們經過在 shell 中鍵入命令或直接在菜單中選擇來執行一個程序/進程. Python 容許你在一個腳本內執行一個新的程序.

大多進程相關函數經過 os 模塊定義相關內容請參閱 第 1.4.4 小節 .

 

3.2. threading 模塊

(可選threading 模塊爲線程提供了一個高級接口 Example 3-1 所示它源自 Java 的線程實現和低級的 thread 模塊相同只有你在編譯解釋器時打開了線程支持纔可使用它 .

你只須要繼承 Thread 定義好 run 方法就能夠建立一 個新的線程使用時首先建立該類的一個或多個實例而後調用 start 方法這樣每一個實例的run 方法都會運行在它本身的線程裏.

Example 3-1 使用了 Lock 對象來在全局 Counter 對象裏建立臨界區 (critical section). 若是刪除了 acquire  release 語句那麼 Counter 極可能不會到達 100.

 

3.3. Queue 模塊

Queue 模塊提供了一個線程安全的隊列 (queue) 實現, . 你能夠經過它在多個線程裏安全訪問同個對象.

Example 3-3 展現瞭如何限制隊列的大小若是隊列滿了那麼控制主線程 (producer threads) 被阻塞等待項目被彈出 (pop off).

你能夠經過繼承 Queue 類來修改它的行爲Example 3-4 爲咱們展現了一個簡單的具備優先級的隊列它接受一個元組做爲參數元組的第一個成員表示優先級(數值越小優先級越高).

 

3.4. thread 模塊

(可選thread 模塊提爲線程提供了一個低級 (low_level) 的接口只有你在編譯解釋器時打開了線程支持纔可使用它若是沒有特殊須要最好使用高級接口 threading 模塊替代.

 

3.5. commands 模塊

(只用於 Unix) commands 模塊包含一些用於執行外部命令的函數

 

3.6. pipes 模塊

(只用於 Unix) pipes 模塊提供了 "轉換管道 (conversion pipelines)" 的支持你能夠建立包含許多外部工具調用的管道來處理多個文件

 

3.7. popen2 模塊

popen2 模塊容許你執行外部命令並經過流來分別訪問它的 stdin  stdout ( 可能還有 stderr ).

在 python 1.5.2 以及以前版本該模塊只存在於 Unix 平臺上. 2.0 , Windows 下也實現了該函數

 

3.8. signal 模塊

你可使用 signal 模塊配置你本身的信號處理器 (signal handler),  Example 3-11 所示當解釋器收到某個信號時信號處理器會當即執行.

 

4. 數據表示

"PALO ALTO, Calif. - Intel says its Pentium Pro and new Pentium II chips have a flaw that can cause computers to sometimes make mistakes but said the problems could be fixed easily with rewritten software."

- Reuters telegram

 

4.1. 概覽

本章描述了一些用於在 Python 對象和其餘數據表示類型間相互轉換的模塊這些模塊一般用於讀寫特定的文件格式或是儲存/取出 Python 變量.

4.1.1. 二進制數據

Python 提供了一些用於二進制數據解碼/編碼的模塊struct 模塊用於在 二進制數據結構(例如 中的 struct )和 Python 元組間轉換array 模塊將二進制數據陣列 ( C arrays )封裝爲 Python 序列對象.

4.1.2. 自描述格式

marshal  pickle 模塊用於在不一樣的 Python 程序間共享/傳遞數據.

marshal 模塊使用了簡單的自描述格式( Self-Describing Formats ), 它支持大多的內建數據類型包括 code 對象. Python 自身也使用了這個格式來儲存編譯後代碼( .pyc 文件).

pickle 模塊提供了更復雜的格式它支持用戶定義的類自引用數據結構等等pickle 是用 Python 寫的相對來講速度較慢不過還有一個 cPickle 模塊使用 實現了相同的功能速度和 marshal 不相上下.

4.1.3. 輸出格式

一些模塊提供了加強的格式化輸出用來補充內建的 repr 函數和 字符串格式化操做符.

pprint 模塊幾乎能夠將任何 Python 數據結構很好地打印出來(提升可讀性).

repr 模塊能夠用來替換內建同名函數該模塊與內建函數不一樣的是它限制了不少輸出形式他只會 輸出字符串的前 30 個字符它只打印嵌套數據結構的幾個等級等等.

4.1.4. 編碼二進制數據

Python 支持大部分常見二進制編碼例如 base64 , binhex (一種 Macintosh 格式) , quoted printable , 以及 uu 編碼.

 

4.2. array 模塊

array 模塊實現了一個有效的陣列儲存類型陣列和列表相似但其中全部的項目必須爲相同的 類型該類型在陣列建立時指定.

Examples 4-1 到 4-5 都是很簡單的範例Example 4-1 建立了一個 array 對象而後使用 tostring 方法將內部緩衝區( internal buffer )複製到字符串.

 

4.3. struct 模塊

struct 模塊用於轉換二進制字符串和 Python 元組pack 函數接受格式字符串以及額外參數根據指定格式將額外參數轉換爲二進制字符串upack 函數接受一個字符串做爲參數返回一個元組

 

4.4. xdrlib 模塊

xdrlib 模塊用於在 Python 數據類型和 Sun 的 external data representation (XDR) 間相互轉化

 

4.5. marshal 模塊

marshal 模塊能夠把不連續的數據組合起來 與字符串相互轉化這樣它們就能夠寫入文件或是在網絡中傳輸

marshal 模塊使用了簡單的自描述格式對於每一個數據項目格式化後的字符串都包含一個類型代碼而後是一個或多個類型標識區域整數使用小字節序( little-endian order )儲存字符串儲存時和它自身內容長度相同(可能包含空字節), 元組由組成它的對象組合表示.

 

4.6. pickle 模塊

pickle 模塊同 marshal 模塊相同將數據連續化便於保存傳輸它比 marshal 要慢一些但它能夠處理類實例共享的元素以及遞歸數據結構等.

 

4.7. cPickle 模塊

(可選注意大小寫) cPickle 模塊是針對 pickle 模塊的一個更快的實現.

 

4.8. copy_reg 模塊

你可使用 copy_reg 模塊註冊你本身的擴展類型這樣 pickle  copy 模塊就會知道 如何處理非標準類型.

咱們能夠註冊一個 code 對象處理器來完成目標處理器應包含兩個部分一個 pickler , 接受 code 對象 並返回一個只包含簡單數據類型的元組以及一個unpickler , 做用相反接受這樣的元組做爲參數.

若是你是在網絡中傳輸 pickle 後的數據那麼請確保自定義的 unpickler 在數據接收端也是可用的.

 

4.9. pprint 模塊

pprint 模塊( pretty printer )用於打印 Python 數據結構當你在命令行下打印 特定數據結構時你會發現它頗有用(輸出格式比較整齊便於閱讀).

 

4.10. repr 模塊

repr 模塊提供了內建 repr 函數的另個版本它限制了不少(字符串長度遞歸等). 

 

4.11. base64 模塊

base64 編碼體系用於將任意二進制數據轉換爲純文本它將一個 字節的二進制字節組 轉換爲 個文本字符組儲存並且規定只容許如下集合中的字符出現:

 

4.12. binhex 模塊

binhex 模塊用於到 Macintosh BinHex 格式的相互轉化

該模塊有兩個函數 binhex  hexbin .

 

4.13. quopri 模塊

quopri 模塊基於 MIME 標準實現了引用的可打印編碼( quoted printable encoding ).

這樣的編碼能夠將不包含或只包含一部分U.S. ASCII 文本的信息例如大多歐洲語言中文轉換爲只包含 U.S. ASCII 的信息在一些老式的 mail 代理中你會發現這頗有用由於它們通常不支持特殊

 

4.14. uu 模塊

uu 編碼體系用於將任意二進制數據轉換爲普通文本格式該格式在新聞組中很流行但逐漸被 base64 編碼取代.

uu 編碼將每一個 字節( 24 )的數據組轉換爲 個可打印字符(每一個字符 ), 使用從 chr(32) (空格到 chr(95) 的字符. uu 編碼一般會使數據大小增長 40% .

一個編碼後的數據流以一個新行開始它包含文件的權限( Unix 格式)和文件名以 end 行結尾:

begin 666 sample.jpg M_]C_X 02D9)1@ ! 0 0 ! #_VP!# @&!@<&!0@'!P<)'0@*#!0-# L+ ...more lines like this... end

uu 模塊提供了兩個函數encode  decode .

encode(infile, outfile, filename) 函數從編碼輸入文件中的數據而後寫入到輸出文件中. . infile 和 outfile 能夠是文件名或文件對象. filename 參數做爲起始域的文件名寫入.

 

4.15. binascii 模塊

binascii 提供了多個編碼的支持函數包括 base64 , binhex , 以及 uu . 2.0 及之後版本中你還可使用它在二進制數據和十六進制字符串中相互轉換.

 

5. 文件格式

 

5.1. 概覽

本章將描述用於處理不一樣文件格式的模塊.

5.1.1. Markup 語言

Python 提供了一些用於處理可擴展標記語言( Extensible Markup Language , XML ) 和超文本標記語言( Hypertext Markup Language , HTML )的擴展. Python 一樣提供了對 標準通用標記語言( Standard Generalized Markup Language , SGML )的支持.

全部這些格式都有着相同的結構由於 HTML 和 XML 都來自 SGML . 每一個文檔都是由 起始標籤( start tags ), 結束標籤( end tags ), 文本(又叫字符數據), 以及實體引用( entity references )構成:

<document name="sample.xml"> <header>This is a header</header> <body>This is the body text. The text can contain plain text ("character data"), tags, and entities. </body> </document>

在這個例子中<document>, <header>, 以及 <body> 是起始標籤每一個起始標籤都有一個對應的結束標籤使用斜線 "/" 標記起始標籤能夠包含多個屬性好比這裏的 name 屬性.

起始標籤和它對應的結束標籤中的任何東西被稱爲 元素( element )這裏 document 元素包含 header  body 兩個元素.

是一個字符實體( character entity ). 字符實體用於在文本區域中表示特殊的保留字符使用 指示這裏它表明一個引號常見字符實體還有 < ( < )" 和 > ( > )" .

雖然 XML , HTML , SGML 使用相同的結構塊但它們還有一些不一樣點在 XML 全部元素必須有起始和結束標籤全部標籤必須正確嵌套( well-formed ). 並且 XML 是區分大小寫的因此 <document>  <Document> 是不一樣的元素類型.

HTML 有很高靈活性, HTML 語法分析器通常會自動補全缺失標籤例如當遇到一個以 <P> 標籤開始的新段落卻沒有對應結束標籤語法分析器會自動添加一個 </P> 標籤. HTML 也是區分大小寫的另外一方面, XML 容許你定義任何元素而 HTML 使用一些由 HTML 規範定義的固定元素.

SGML 有着更高的靈活性你可使用本身的聲明( declaration ) 定義源文件如何轉換到元素結構, DTD ( document type description , 文件類型定義)能夠用來 檢查結構並補全缺失標籤技術上來講, HTML 和 XML 都是 SGML 應用有各自的 SGML 聲明並且 HTML 有一個標準 DTD .

Python 提供了多個 makeup 語言分析器因爲 SGML 是最靈活的格式, Python  sgmllib 事實上很簡單它不會去處理 DTD , 不過你能夠繼承它來提供更復雜的功能.

Python 的 HTML 支持基於 SGML 分析器htmllib 將具體的格式輸出工做交給 formatter 對象formatter 模塊包含一些標準格式化標誌.

Python 的 XML 支持模塊很複雜先前是隻有與 sgmllib 相似的 xmllib , 後來加入了更高級的 expat 模塊(可選). 而最新版本中已經準備廢棄 xmllib ,啓用 xml 包做爲工具集.

5.1.2. 配置文件

ConfigParser 模塊用於讀取簡單的配置文件相似 Windows 下的 INI 文件.

netrc 模塊用於讀取 .netrc 配置文件, shlex 模塊用於讀取相似 shell 腳本語法的配置文件.

5.1.3. 壓縮檔案格式

Python 的標準庫提供了對 GZIP 和 ZIP ( 2.0 及之後格式的支持基於 zlib 模塊gzip  zipfile 模塊分別用來處理這類文件.

 

5.2. xmllib 模塊

xmllib 已在當前版本中申明不支持.

xmlib 模塊提供了一個簡單的 XML 語法分析器使用正則表達式將 XML 數據分離,  語法分析器只對文檔作基本的檢查例如是否只有一個頂層元素全部的標籤是否匹配.

XML 數據一塊一塊地發送給 xmllib 分析器(例如在網路中傳輸的數據). 分析器在遇到起始標籤數據區域結束標籤和實體的時候調用不一樣的方法.

若是你只是對某些標籤感興趣你能夠定義特殊的 start_tag  end_tag 方法這裏 tag 是標籤名稱這些 start 函數使用它們對應標籤的屬性做爲參數調用(傳遞時爲一個字典).

 

5.3. xml.parsers.expat 模塊

(可選xml.parsers.expat 模塊是 James Clark's Expat XML parser 的接口

 

5.4. sgmllib 模塊

sgmllib 模塊提供了一個基本的 SGML 語法分析器它與 xmllib 分析器基本相同但限制更少(並且不是很完善). 

和在 xmllib 中同樣這個分析器在遇到起始標籤數據區域結束標籤以及實體時調用內部方法若是你只是對某些標籤感興趣那麼你能夠定義特殊的方法.

咱們使用列表保存全部起始標籤而後檢查每一個結束標籤是否匹配前個起始標籤最後確認到達文件末尾時沒有未關閉的標籤.

 

5.5. htmllib 模塊

htmlib 模塊包含了一個標籤驅動的( tag-driven ) HTML 語法分析器它會將數據發送至一個格式化對象.  更多關於如何解析 HTML 的例子請參閱 formatter 模塊.

若是你只是想解析一個 HTML 文件而不是將它交給輸出設備那麼 sgmllib 模塊會是更好的選擇.

 

5.6. htmlentitydefs 模塊

htmlentitydefs 模塊包含一個由 HTML 中 ISO Latin-1 字符實體構成的字典

 

5.7. formatter 模塊

formatter 模塊提供了一些可用於 htmllib 的格式類( formatter classes ).

這些類有兩種formatter  writer . formatter 將 HTML 解析器的標籤和數據流轉換爲適合輸出設備的事件流( event stream ), 而 writer 將事件流輸出到設備上

大多狀況下你可使用 AbstractFormatter 類進行格式化它會根據不一樣的格式化事件調用 writer 對象的方法AbstractWriter 類在每次方法調用時打印一條信息.

 

5.8. ConfigParser 模塊

ConfigParser 模塊用於讀取配置文件.

配置文件的格式與 Windows INI 文件相似能夠包含一個或多個區域( section ), 每一個區域能夠有多個配置條目.

這裏有個樣例配置文件

[book] title: The Python Standard Library author: Fredrik Lundh email: fredrik@pythonware.com version: 2.0-001115 [ematter] pages: 250 [hardcopy] pages: 350

 

 

5.9. netrc 模塊

netrc 模塊能夠用來解析 .netrc 配置文件如 Example 5-18 所示該文件用於在用戶的 home 目錄儲存 FTP 用戶名和密碼. (別忘記設置這個文件的屬性爲: "chmod 0600 ~/.netrc," 這樣只有當前用戶能訪問).

 

5.10. shlex 模塊

shlex 模塊爲基於 Unix shell 語法的語言提供了一個簡單的 lexer (也就是 tokenizer). 

 

5.11. zipfile 模塊

( 2.0 新增zipfile 模塊能夠用來讀寫 ZIP 格式.

5.11.1. 列出內容

使用 namelist  infolist 方法能夠列出壓縮檔的內容前者返回由文件名組成的列表後者返回由 ZipInfo 實例組成的列表

5.11.2. 從 ZIP 文件中讀取數據

調用 read 方法就能夠從 ZIP 文檔中讀取數據它接受一個文件名做爲參數返回字符串

5.11.3. 向 ZIP 文件寫入數據

向壓縮檔加入文件很簡單將文件名文件在 ZIP 檔中的名稱傳遞給 write 方法便可.

write 方法的第三個可選參數用於控制是否使用壓縮默認爲 zipfile.ZIP_STORED , 意味着只是將數據儲存在檔案裏而不進行任何壓縮若是安裝了zlib 模塊那麼就可使用 zipfile.ZIP_DEFLATED 進行壓縮.

zipfile 模塊也能夠向檔案中添加字符串不過這須要一點技巧你須要建立一個 ZipInfo 實例並正確配置它

 

5.12. gzip 模塊

gzip 模塊用來讀寫 gzip 格式的壓縮文件,

 

6. 郵件和新聞消息處理

"To be removed from our list of future commercial postings by [SOME] PUBLISHING COMPANY an Annual Charge of Ninety Five dollars is required. Just send $95.00 with your Name, Address and Name of the Newsgroup to be removed from our list."

- Newsgroup spammer, July 1996

"想要退出 '宣傳公司的將來商業廣告列表嗎您須要付 95 美圓只要您支付95美圓而且告訴咱們您的姓名地址和須要退出的新聞組咱們就會把您從列表中移除."

新聞組垃圾發送者, 1996 年 

 

6.1. 概覽

Python 有大量用於處理郵件和新聞組的模塊其中包括了許多常見的郵件格式.

 

6.2. rfc822 模塊

rfc822 模塊包括了一個郵件和新聞組的解析器 (也可用於其它符合 RFC 822 標準的消息好比 HTTP ).

一般, RFC 822 格式的消息包含一些標頭字段後面至少有一個空行而後是信息主體.

消息解析器讀取標頭字段後會返回一個以消息標頭爲鍵的類字典對象地址字段被解析爲 (實際名稱郵件地址這樣的元組數據字段被解析爲 元時間元組可使用 time 模塊處理.

 

6.3. mimetools 模塊

多用途因特網郵件擴展 ( Multipurpose Internet Mail Extensions, MIME ) 標準定義瞭如何在 RFC 822 格式的消息中儲存非 ASCII 文本圖像以及其它數據.

mimetools 模塊包含一些讀寫 MIME 信息的工具它還提供了一個相似 rfc822 模塊中 Message 的類用於處理 MIME 編碼的信息

 

6.4. MimeWriter 模塊

MimeWriter 模塊用於生成符合 MIME 郵件標準的 "多部分的信息

 

6.5. mailbox 模塊

mailbox 模塊用來處理各類不一樣類型的郵箱格式大部分郵箱格式使用文本文件儲存純 RFC 822 信息用分割行區別不一樣的信息.

 

6.6. mailcap 模塊

mailcap 模塊用於處理 mailcap 文件該文件指定了不一樣的文檔格式的處理方法( Unix 系統下). 

 

6.7. mimetypes 模塊

mimetypes 模塊能夠判斷給定 url ( uniform resource locator , 統一資源定位符的 MIME 類型它基於一個內建的表還可能搜索 Apache 和 Netscape 的配置文件

 

6.8. packmail 模塊

(已廢棄packmail 模塊能夠用來建立 Unix shell 檔案若是安裝了合適的工具那麼你就能夠直接經過運行來解開這樣的檔案.注意這個模塊不能處理二進制文件例如聲音或者圖像文件.

 

6.9. mimify 模塊

mimify 模塊用於在 MIME 編碼的文本信息和普通文本信息(例如 ISO Latin 1 文本)間相互轉換它能夠用做命令行工具或是特定郵件代理的轉換過濾器:

 

6.10. multifile 模塊

multifile 模塊容許你將一個多部分的 MIME 信息的每部分做爲單獨的文件處理

 

7. 網絡協議

"Increasingly, people seem to misinterpret complexity as sophistication, which is baffling - the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user."

- Niklaus Wirth

 

7.1. 概覽

本章描述了 Python 的 socket 協議支持以及其餘創建在 socket 模塊上的網絡 模塊這些包含了對大多流行 Internet 協議客戶端的支持以及一些可用來 實現 Internet 服務器的框架.

對於那些本章中的底層的例子我將使用兩個協議做爲樣例: Internet Time Protocol ( Internet 時間協議 以及 Hypertext Transfer Protocol (超文本傳輸協議, HTTP 協議).

7.1.1. Internet 時間協議

Internet 時間協議 ( RFC 868, Postel 和 Harrenstien, 1983) 可讓 一個網絡客戶端得到一個服務器的當前時間.

由於這個協議是輕量級的許多 Unix 系統(但不是全部)都提供了這個服務它多是最簡單的網絡協議了服務器等待鏈接請求並在鏈接後返回當前時間 ( 4 字節整數自從 1900 年 月 日到當前的秒數).

7.1.2. HTTP 協議

超文本傳輸協議 ( HTTP, RFC 2616 ) 是另個徹底不一樣的東西最近的格式說明書( Version 1.1 )超過了 100 .

從它最簡單的格式來看這個協議是很簡單的客戶端發送以下的請求到服務器請求一個文件:

GET /hello.txt HTTP/1.0 Host: hostname User-Agent: name [optional request body , 可選的請求正文]

服務器返回對應的響應:

HTTP/1.0 200 OK Content-Type: text/plain Content-Length: 7 Hello

請求和響應的 headers (報頭)通常會包含更多的域可是請求 header 中的 Host /字段是必須提供的.

header 行使用 "/r/n" 分割並且 header 後必須有一個空行即便沒有正文 (請求和響應都必須符合這條規則).

剩下的 HTTP 協議格式說明書細節例如內容協商緩存機制保持鏈接等等請參閱 Hypertext TransferProtocol - HTTP/1.1 ( http://www.w3.org/Protocols).

 

7.2. socket 模塊

socket 模塊實現了到 socket 通信層的接口你可使用該模塊建立 客戶端或是服務器的 socket .

咱們首先以一個客戶端爲例Example 7-1 中的客戶端鏈接到一個時間協議服務器讀取 字節的返回數據並把它轉換爲一個時間值.

socket 工廠函數( factory function )根據給定類型(該例子中爲 Internet stream socket , 即就是 TCP socket )建立一個新的 socket . connect 方法嘗試將這個 socket 鏈接到指定服務器上成功後就可使用 recv 方法讀取數據.

建立一個服務器 socket 使用的是相同的方法不過這裏不是鏈接到服務器而是將 socket bind (綁定)到本機的一個端口上告訴它去監聽鏈接請求而後儘快處理每一個到達的請求.

Example 7-2 建立了一個時間服務器綁定到本機的 8037 端口( 1024 前的全部端口 是爲系統服務保留的, Unix 系統下訪問它們你必需要有 root 權限).

listen 函數的調用告訴 socket 咱們指望接受鏈接參數表明鏈接 的隊列(用於在程序沒有處理前保持鏈接)大小最後 accept 循環將當前時間返回 給每一個鏈接的客戶端.

注意這裏的 accept 函數返回一個新的 socket 對象這個對象是直接鏈接到客戶端 的而原 socket 只是用來保持鏈接全部後來的數據傳輸操做都使用新的 socket .

咱們可使用 Example 7-3 , ( Example 7-1 的通用化版本)來測試這個服務器, .

Example 7-3 所示的腳本也能夠做爲模塊使用你只須要導入 timeclient 模塊而後調用它的 gettime 函數.

目前爲止咱們已經使用了流( TCP ) socket . 時間協議還提到了 UDP sockets (報文). 流 socket 的工做模式和電話線相似你會知道在遠端 是否有人拿起接聽器在對方掛斷的時候你也會注意到相比之下發送報文更像 是在一間黑屋子裏大聲喊可能某人會在那裏但你只有在他回覆的時候纔會知道.

 Example 7-4 所示你不須要在經過報文 socket 發送數據時鏈接遠程機器只需使用 sendto 方法它接受數據和接收者地址做爲參數讀取報文的時候使用 recvfrom 方法.

這裏的 recvfrom 返回兩個值數據和發送者的地址後者用於發送回覆數據.

最主要的不一樣在於服務器使用 bind 來分配一個已知端口給 socket , 根據 recvfrom 函數返回的地址向客戶端發送數據.

 

7.3. select 模塊

select 模塊容許你檢查一個或多個 socket , 管道以及其餘流兼容對象所接受的數據如 Example 7-6 所示.

你能夠將一個或更多 socket 傳遞給 select 函數而後等待它們狀態改變(可讀可寫或是發送錯誤信號):

  • 若是某人在調用了 listen 函數後鏈接當遠端數據到達時, socket 就成爲可讀的(這意味着 accept 不會阻塞). 或者是 socket 被關閉或重置時(在此狀況下recv 會返回一個空字符串).
  • 當非阻塞調用 connect 方法後創建鏈接或是數據能夠被寫入到 socket , socket 就成爲可寫的.
  • 當非阻塞調用 connect 方法後鏈接失敗後, socket 會發出一個錯誤信號.

 Example 7-6 咱們等待監聽 socket 變成可讀狀態這表明有一個鏈接請求到達咱們用和以前同樣的方法處理 channel socket , 由於它不可能由於等待 字節而填充網絡 緩衝區若是你須要向客戶端發送大量的數據那麼你應該在循環的頂端把數據加入到 is_writable 列表中而且只在 select 容許的狀況下寫入.

若是你設置 socket 非阻塞模式(經過調用 setblocking 方法), 那麼你就可使用 select 來等待 socket 鏈接不過 asyncore 模塊(參見下一節)提供了一個強大的框架它自動爲你處理好了這一切因此我不許備在這裏多說什麼看下一節吧.

 

7.4. asyncore 模塊

asyncore 模塊提供了一個 "反饋性的( reactive )" socket 實現該模塊容許你定義特定過程完成後所執行的代碼而不是建立 socket 對象調用它們的方法你只須要繼承 dispatcher 而後重載以下方法 (能夠選擇重載某一個或多個)就能夠實現異步的 socket 處理器.

  • handle_connect : 一個鏈接成功創建後被調用.
  • handle_expt : 鏈接失敗後被調用.
  • handle_accept : 鏈接請求創建到一個監聽 socket 上時被調用回調時( callback )應該使用 accept 方法來得到客戶端 socket .
  • handle_read : 有來自 socket 的數據等待讀取時被調用回調時應該使用 recv 方法來得到數據.
  • handle_write : socket 能夠寫入數據的時候被調用使用 send 方法寫入數據.
  • handle_close : 當 socket 被關閉或復位時被調用.
  • handle_error(type, value, traceback) 在任何一個回調函數發生 Python 錯誤時被調用默認的實現會打印跟蹤返回消息到 sys.stdout .

Example 7-7 展現了一個時間客戶端 socket 模塊中的那個相似.

若是你不想記錄任何信息那麼你能夠在你的 dispatcher 類裏重載 log 方法.

Example 7-8 展現了對應的時間服務器注意這裏它使用了兩個 dispatcher 子類一個用於監聽 socket , 另個用於與客戶端通信.

除了 dispatcher 這個模塊還包含一個 dispatcher_with_send 你可使用這個類發送大量的數據而不會阻塞網絡通信緩衝區.

Example 7-9 中的模塊經過繼承 dispatcher_with_send 類定義了一個 AsyncHTTP 當你建立一個它的實例後它會發出一個 HTTP GET 請求並把 接受到的數據發送到一個 "consumer" 目標對象

若是服務器返回狀態 301 (永久重定向或者是 302 (臨時重定向), 重定向的 consumer 會關閉當前請求並向新地址發出新請求全部對 consumer 的其餘調用傳遞給原來的 consumer .

 

7.5. asynchat 模塊

asynchat 模塊是對 asyncore 的一個擴展它提供對面向行( line-oriented )的協議的額外支持它還提供了加強的緩衝區支持(經過 push 方法和 "producer" 機制.

現了一個很小的 HTTP 服務器它只是簡單地返回包含 HTTP 請求信息的 HTML 文檔(瀏覽器窗口出現的輸出).

producer 接口容許你傳入( "push" )太大以致於沒法在內存中儲存的對象asyncore 在須要更多數據的時候自動調用 producer  more 方法另外它使用一個空字符串標記文件的末尾.

 

 

7.6. urllib 模塊

urlib 模塊爲 HTTP , FTP , 以及 gopher 提供了一個統一的客戶端接口它會自動地根據 URL 選擇合適的協議處理器.

從 URL 獲取數據是很是簡單的只須要調用 urlopen 方法而後從返回的流對象中讀取數據便可,

這個流對象提供了一些非標準的屬性headers 是一個 Message 對象( mimetools 模塊中定義), url 是實際的 URL . 後者會根據服務器的重定向而更新.

urlopen 函數其實是一個輔助函數它會建立一個 FancyURLopener 類的實例並調用它的 open 方法你也能夠繼承這個類來完成特殊的行爲

 

7.7. urlparse 模塊

urlparse 模塊包含用於處理 URL 的函數能夠在 URL 和平臺特定的文件名間相互轉換

一個常見用途就是把 HTTP URL 分割爲主機名和路徑組件(一個 HTTP 請求會涉及到 主機名以及請求路徑), 

 

7.8. cookie 模塊

(2.0 中新增該模塊爲 HTTP 客戶端和服務器提供了基本的 cookie 支持

 

7.9. robotparser 模塊

(2.0 中新增robotparser 模塊用來讀取 robots.txt 文件該文件用於 Robot Exclusion Protocol (搜索機器人排除協議?http://info.webcrawler.com/mak/projects/robots/robots.html).

若是你實現的一個 HTTP 機器人會訪問網路上的任意站點(並不僅是你本身的站點), 那麼最好仍是用該模塊檢查下你所作的一切是否是受歡迎的

 

7.10. ftplib 模塊

ftplib 模塊包含了一個 File Transfer Protocol (FTP , 文件傳輸協議)客戶端的實現.

 

7.11. gopherlib 模塊

gopherlib 模塊包含了一個 gopher 客戶端實現,

 

7.12. httplib 模塊

httplib 模塊提供了一個 HTTP 客戶端接口

注意 httplib 提供的 HTTP 客戶端在等待服務器回覆的時候會阻塞程序異步的解決方法請參閱 asyncore 模塊中的例子.

7.12.1. 將數據發送給服務器

httplib 能夠用來發送其餘 HTTP 命令例如 POST , .

 

7.13. poplib 模塊

poplib 模塊提供了一個 Post Office Protocol ( POP3 協議客戶端實現這個協議用來從郵件服務器 "pop" (拷貝信息到你的我的電腦.

 

7.14. imaplib 模塊

imaplib 模塊提供了一個 Internet Message Access Protocol ( IMAP, Internet 消息訪問協議的客戶端實現這個協議容許你訪問郵件服務器的郵件目錄就好像是在本機訪問同樣.

 

7.15. smtplib 模塊

smtplib 模塊提供了一個 Simple Mail Transfer Protocol ( SMTP , 簡單郵件傳輸協議客戶端實現該協議用於經過 Unix 郵件服務器發送郵件

讀取郵件請使用 poplib  imaplib 模塊.

 

7.16. telnetlib 模塊

telnetlib 模塊提供了一個 telnet 客戶端實現.

 

7.17. nntplib 模塊

nntplib 模塊提供了一個網絡新聞傳輸協議( Network News Transfer Protocol, NNTP )客戶端的實現.

7.17.1. 列出消息

重新聞服務器上讀取消息以前你必須鏈接這個服務器並選擇一個新聞組

 

7.18. SocketServer 模塊

SocketServer 爲各類基於 socket 的服務器提供了一個框架該模塊提供了大量的類你能夠用它們來建立不一樣的服務器.

 

7.19. BaseHTTPServer 模塊

這是一個創建在 SocketServer 框架上的基本框架用於 HTTP 服務器.

在每次從新載入頁面時會生成一條隨機信息path 變量包含當前 URL , 你可使用它爲不一樣的 URL 生成不一樣的內容 (訪問除根目錄的其餘任何 path 該腳本都會返回一個錯誤頁面).

更有擴展性的 HTTP 框架請參閱 SimpleHTTPServer  CGIHTTPServer 模塊.

 

7.20. SimpleHTTPServer 模塊

SimpleHTTPServer 模塊是一個簡單的 HTTP 服務器它提供了標準的 GET 和 HEAD 請求處理器客戶端請求的路徑名稱會被翻譯爲一個相對文件名 (相對於服務器啓動時的當前路徑).

這個服務器會忽略驅動器符號和相對路徑名(例如 `..`). 但它並無任何訪問驗證處理因此請當心使用.

 

7.21. CGIHTTPServer 模塊

CGIHTTPServer 模塊是一個能夠經過公共網關接口( common gateway interface , CGI )調用外部腳本的 HTTP 服務器

 

7.22. cgi 模塊

cgi 模塊爲 CGI 腳本提供了函數和類支持它還能夠處理 CGI 表單數據.

 

7.23. webbrowser 模塊

(2.0 中新增webbrowser 模塊提供了一個到系統標準 web 瀏覽器的接口它提供了一個 open 函數接受文件名或 URL 做爲參數而後在瀏覽器中打開它若是你又一次調用 open 函數那麼它會嘗試在相同的窗口打開新頁面

在 Unix 該模塊支持 lynx , Netscape , Mosaic , Konquerer , 和 Grail . 在 Windows 和 Macintosh 它會調用標準瀏覽器 (在註冊表或是 Internet 選項面板中定義).

 

8. 國際化

 

8.1. locale 模塊

locale 模塊提供了 本地化( localization )函數的接口同時提供相關函數實現基於當前 locale 設置的數字字符串轉換. ( int ,float , 以及 string 模塊中的相關轉換函數不受 locale 設置的影響.)

 

8.2. unicodedata 模塊

( 2.0 中新增unicodedata 模塊包含了 Unicode 字符的屬性例如字符類別分解數據以及數值

 

8.3. ucnhash 模塊

(僅適用於 2.0 ) ucnhash 模塊爲一些 Unicode 字符代碼提供了特定的命名你能夠直接使用 /N{} 轉義符將 Unicode 字符名稱映射到字符代碼上

 

9. 多媒體相關模塊

"Wot? No quote?"

- Guido van Rossum

 

9.1. 概覽

Python 提供了一些用於處理圖片和音頻文件的模塊.

另請參閱 Pythonware Image Library ( PIL , http://www.pythonware.com/products/pil/ ), 以及 PythonWare Sound Toolkit (PST ,http://www.pythonware.com/products/pst/ ).

譯註別參閱 PST 廢了 pymedia 代替吧.

 

9.2. imghdr 模塊

imghdr 模塊可識別不一樣格式的圖片文件當前版本能夠識別 bmp , gif , jpeg , pbm , pgm , png , ppm , rast (Sun raster), rgb (SGI), tiff , 以及 xbm圖像

 

 

9.3. sndhdr 模塊

sndhdr 模塊可來識別不一樣的音頻文件格式並提取文件內容相關信息.執行成功後what 函數將返回一個由文件類型採樣頻率聲道數音軌數和每一個採樣點位數組成的元組具體含義請參考 help(sndhdr) .

 

9.4. whatsound 模塊

(已廢棄whatsound  sndhdr 模塊的一個別名

 

9.5. aifc 模塊

aifc 模塊用於讀寫 AIFF 和 AIFC 音頻文件(在 SGI 和 Macintosh 的計算機上使用). 

 

9.6. sunau 模塊

sunau 模塊用於讀寫 Sun AU 音頻文件

 

9.7. sunaudio 模塊

sunaudio 模塊用於識別 Sun AU 音頻文件並提取其基本信息sunau 模塊爲 Sun AU 文件提供了更完成的支持如 Example 9-6 所示

 

9.8. wave 模塊

wave 模塊用於讀寫 Microsoft WAV 音頻文件.

 

9.9. audiodev 模塊

(只用於 Unix) audiodev 爲 Sun 和 SGI 計算機提供了音頻播放支持.

 

9.10. winsound 模塊

(只用於 Windows ) winsound 模塊容許你在 Winodws 平臺上播放 Wave 文件 Example 9-9 所示.

flag 變量說明:

  • SND_FILENAME - sound 是一個 wav 文件名
  • SND_ALIAS - sound 是一個註冊表中指定的別名
  • SND_LOOP - 重複播放直到下一次 PlaySound ; 必須指定 SND_ASYNC
  • SND_MEMORY - sound 是一個 wav 文件的內存映像
  • SND_PURGE - 中止指定 sound 的全部實例
  • SND_ASYNC - 異步播放聲音聲音開始播放後函數當即返回
  • SND_NODEFAULT - 找不到 sound 時不播放默認的 beep 聲音
  • SND_NOSTOP - 不打斷當前播放中的任何 sound
  • SND_NOWAIT - sound 驅動忙時當即返回

 

10. 數據儲存

"Unlike mainstream component programming, scripts usually do not introduce new components but simply 'wire' existing ones. Scripts can be seen as introducing behavior but no new state ... Of course, there is nothing to stop a 'scripting' language from introducing persistent state — it then simply turns into a normal programming language."

- Clemens Szyperski, in Component Software

 

10.1. 概覽

Python 提供了多種類似數據庫管理( database manager )的驅動它們的模型都基於 Unix  dbm 這些數據庫和普通的字典對象相似但這裏須要注意的是它只能接受字符串做爲鍵和值. ( shelve 模塊能夠處理任何類型的值)

 

10.2. anydbm 模塊

anydbm 模塊爲簡單數據庫驅動提供了統一標準的接口.

當第一次被導入的時候anydbm 模塊會自動尋找一個合適的數據庫驅動按照 dbhash , gdbm , dbm ,  dumbdbm 的順序嘗試若是沒有找到任何模塊它將引起一個 ImportError 異常.

open 函數用於打開或建立一個數據庫(使用導入時找到的數據庫驅動), 

 

10.3. whichdb 模塊

whichdb 模塊能夠判斷給定數據庫文件的格式

10.4. shelve 模塊

shelve 模塊使用數據庫驅動實現了字典對象的持久保存shelve 對象使用字符串做爲鍵但值能夠是任意類型全部能夠被 pickle 模塊處理的對象均可以做爲它的值

 

10.5. dbhash 模塊

(可選dbhash 模塊爲 bsddb 數據庫驅動提供了一個 dbm 兼容的接口.

 

10.6. dbm 模塊

(可選dbm 模塊提供了一個到 dbm 數據庫驅動的接口(在許多 Unix 平臺上均可用).  Example 10-6 所示.

 

10.7. dumbdbm 模塊

dumbdbm 模塊是一個簡單的數據庫實現 dbm 一類類似但使用純 Python 實現它使用兩個文件一個二進制文件 (.dat) 用於儲存數據一個文本文件 (.dir) 用於數據描述.

 

10.8. gdbm 模塊

(可選gdbm 模塊提供了到 GNU dbm 數據驅動的接口

 

11. 工具和實用程序

標準庫中有一些模塊既可用做模塊又能夠做爲命令行實用程序.

 

11.1. dis 模塊

dis 模塊是 Python 的反彙編器它能夠把字節碼轉換爲更容易讓人看懂的格式.

你能夠從命令行調用反彙編器它會編譯給定的腳本並把反彙編後的字節代碼輸出到終端上:

$ dis.py hello.py 0 SET_LINENO 0 3 SET_LINENO 1 6 LOAD_CONST 0 ('hello again, and welcome to the show') 9 PRINT_ITEM 10 PRINT_NEWLINE 11 LOAD_CONST 1 (None) 14 RETURN_VALUE

固然 dis 也能夠做爲模塊使用dis 函數接受一個類方法函數或者 code 對象 做爲單個參數

 

11.2. pdb 模塊

pdb 模塊是標準 Python 調試器( debugger ). 它基於 bdb 調試器框架.

你能夠從命令行調用調試器 (鍵入  進入下一行代碼鍵入 help 得到可用命令列表):

$ pdb.py hello.py > hello.py(0)?() (Pdb) n > hello.py() (Pdb) n hello again, and welcome to the show --Return-- > hello.py(1)?()->None (Pdb)

 

11.3. bdb 模塊

bdb 模塊爲提供了一個調試器框架你可使用它來建立自定義的調試器你須要作的只是繼承 Bdb 覆蓋它的 user 方法(在每次調試器中止的時候被調用). 使用各類各樣的 set 方法能夠控制調試器.

 

11.4. profile 模塊

profile 模塊是標準 Python 分析器.

和反彙編器調試器相同你能夠從命令行調用分析器:

$ profile.py hello.py hello again, and welcome to the show 3 function calls in 0.785 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.001 0.001 0.002 0.002 <string>:1(?) 1 0.001 0.001 0.001 0.001 hello.py:1(?) 1 0.783 0.783 0.785 0.785 profile:0(execfile('hello.py')) 0 0.000 0.000 profile:0(profiler)

咱們還能夠從程序中調用 profile 來對程序性能作分析.

你可使用 pstats 模塊來修改結果報告的形式.

 

11.5. pstats 模塊

pstats 模塊用於分析 Python 分析器收集的數據

 

11.6. tabnanny 模塊

(2.0 新增tabnanny 模塊用於檢查 Python 源文件中的含糊的縮進當文件混合了 tab 和空格兩種縮進時候, nanny (保姆)會當即給出提示.

在下邊使用的 badtabs.py 文件中, if 語句後的第一行使用 個空格和 個 tab . 第二行只使用了空格.

$ tabnanny.py -v samples/badtabs.py ';samples/badtabs.py': *** Line 3: trouble in tab city! *** offending line: print "world" indent not equal e.g. at tab sizes 1, 2, 3, 5, 6, 7, 9

由於 Python 解釋器把 tab 做爲 個空格來處理因此這個腳本能夠正常運行在全部符合代碼標準(一個 tab 爲 個空格)的編輯器中它也會正常顯示固然這些都騙不過 nanny .

 sys.stdout 重定向到一個 StringIO 對象就能夠捕獲輸出.

 

12. 其餘模塊

 

12.1. 概覽

本章介紹了一些平臺相關的模塊重點放在了適用於整個平臺家族的模塊上. (好比 Unix , Windows 家族)

 

12.2. fcntl 模塊

(只用於 Unix) fcntl 模塊爲 Unix上的 ioctl  fcntl 函數提供了一個接口它們用於文件句柄和 I/O 設備句柄的 "out of band" 操做包括讀取擴展屬性控制阻塞更改終端行爲等等. (out of band management: 指使用分離的渠道進行設備管理這使系統管理員能在機器關機的時候對服務器網絡進行監視和管理出處http://en.wikipedia.org/wiki/Out-of-band_management )

關於如何在平臺上使用這些函數請查閱對應的 Unix man 手冊.

該模塊同時提供了 Unix 文件鎖定機制的接口輸出結果是由同時運行 個副本獲得的像這樣(都在一句命令行裏):

python fcntl-example-1.py& python fcntl-example-1.py& python fcntl-example-1.py&

若是你註釋掉對 flock 的調用那麼 counter 文件不會正確地更新.

 

12.3. pwd 模塊

(只用於 Unix) pwd 提供了一個到 Unix 密碼/password "數據庫"( /etc/passwd 以及相關文件 )的接口這個數據庫(通常是一個純文本文件)包含本地機器用戶帳戶的信息.

getpwall 函數返回一個包含全部可用用戶數據庫入口的列表你可使用它搜索一個用戶.

當須要查詢不少名稱的時候你可使用 getpwall 來預加載一個字典,

 

12.4. grp 模塊

(只用於 Unix) grp 模塊提供了一個到 Unix 用戶組/group ( /etc/group )數據庫的接口getgrgid 函數返回給定用戶組 id 的相關數據,getgrnam 返回給定用戶組名稱的相關數據.

getgrall 函數返回包含全部可用用戶組數據庫入口的列表.

若是須要執行不少用戶組查詢你可使用 getgrall 來把當前全部的用戶組複製到一個字典裏這能夠節省一些時間

 

12.5. nis 模塊

 

12.6. curses 模塊

 

12.7. termios 模塊

(只用於 Unix , 可選termios 爲 Unix 的終端控制設備提供了一個接口它可用於控制終端通信端口的大多方面.

 

12.8. tty 模塊

(只用於 Unix) tty 模塊包含一些用於處理 tty 設備的工具函數.

 

12.9. resource 模塊

(只用於 Unix , 可選resource 模塊用於查詢或修改當前系統資源限制設置

 

12.10. syslog 模塊

(只用於 Unix 可選) syslog 模塊用於向系統日誌設備發送信息( syslogd ). 這些信息如何處理依不一樣的系統而定一般會被記錄在一個 log 文件中例如/var/log/messages , /var/adm/syslog , 或者其餘相似處理. (若是你找不到這個文件請聯繫你的系統管理員). 

 

12.11. msvcrt 模塊

(只用於 Windows/DOS ) msvcrt 模塊用於訪問 Microsoft Visual C/C++ Runtime Library (MSVCRT) 中函數的方法.

 

12.12. nt 模塊

(非直接使用模塊只用於 Windows ) nt 模塊是 os 模塊在 Windows 平臺下調用的執行模塊幾乎沒有任何緣由直接使用這個模塊請使用 os 模塊替代.

 

12.13. _winreg 模塊

(只用於 Windows , 2.0 中新增_winreg 模塊提供了訪問 Windows 註冊表數據庫的一個基本接口

 

12.14. posix 模塊

(非直接使用模塊只用於 Unix/POSIX ) posix 模塊是 os 模塊在 Unix 及其餘 POSIX 系統下使用的實現模塊通常只須要經過 os 模塊訪問它便可

 

13. 執行支持模塊

就是其餘模塊中用到的模塊.

 

13.1. dospath 模塊

dospath 模塊提供了 DOS 平臺下的 os.path 功能你可使用它在其餘平臺處理 DOS 路徑.

注意 Python 的 DOS 支持可使用斜槓和反斜槓做爲目錄分隔符.

 

13.2. macpath 模塊

macpath 模塊提供了 Macintosh 平臺下的 os.path 功能你也可使用它在其餘平臺處理 Macintosh 路徑.

 

13.3. ntpath 模塊

ntpath 模塊提供了 Windows 平臺下的 os.path 功能你也可使用它在其餘平臺處理 Windows 路徑.

注意該模塊能夠同時使用斜槓和反斜槓做爲目錄分隔符.

 

13.4. posixpath 模塊

posixpath 模塊提供了 Unix 和其餘 POSIX 兼容平臺下的 os.path 功能你也可使用它在其餘平臺處理 POSIX 路徑另外它也能夠處理 URL .

 

13.5. strop 模塊

(已廢棄strop  string 模塊中的大多函數提供了底層 語言實現string 模塊會自動調用它因此通常你不須要直接使用它.

不過在導入 Python 模塊以前處理路徑的時候你可能會用到它在 Python 2.0 及之後版本中你應該使用字符串方法代替 strop , 例如在上邊的代碼中使用 "sys.executable.lower()" 替換 "strop.lower(sys.executable)" .

 

13.6. imp 模塊

imp 模塊包含的函數能夠用於實現自定義的 import 行爲注意這裏的導入功能不支持包具體實現請參閱 knee 模塊的源代碼.

 

13.7. new 模塊

new 模塊是一個底層的模塊你可使用它來建立不一樣的內建對象例如類對象函數對象以及其餘由 Python 運行時系統建立的類型若是你使用的是 1.5.2 版本 那麼你有可能須要從新編譯 Python 來使用這個模塊在默認狀況下並非全部平臺都有這個模塊在 2.0 及之後版本中不須要這麼作.

 

13.8. pre 模塊

(已廢棄pre 模塊是 1.5.2  re 模塊調用的實現功能模塊在當前版本中已廢棄

 

13.9. sre 模塊

(功能實現模塊已聲明不支持sre 模塊是 re 模塊的底層實現通常不必直接使用它並且之後版本將不會支持它

 

13.10. py_compile 模塊

py_compile 模塊用於將 Python 模塊編譯爲字節代碼它和 Python 的 import 語句行爲相似不過它接受文件名而不是模塊名做爲參數compileall 模塊能夠把一個目錄樹下的全部 Python 文件編譯爲字節代碼.

 

13.11. compileall 模塊

compileall 模塊用於將給定目錄下(以及 Python path )的全部 Python 腳本編譯爲字節代碼它也能夠做爲可執行腳本使用(在 Unix 系統下, Python 安裝時會自動調用執行它). 

 

13.12. ihooks 模塊

ihooks 模塊爲替換導入提供了一個框架這容許多個導入機制共存

 

13.13. linecache 模塊

linecache 模塊用於從模塊源文件中讀取代碼它會緩存最近訪問的模塊 (整個源文件). 

traceback 模塊使用這個模塊實現了對導入操做的跟蹤.

 

13.14. macurl2path 模塊

(功能實現模塊macurl2path 模塊用於 URL 和 Macintosh 文件名 的相互映射通常沒有必要直接使用它請使用 urllib 中的機制.

 

13.15. nturl2path 模塊

(功能實現模塊nturl2path 模塊用於 URL 和 Windows 文件名的 相互映射

 

13.16. tokenize 模塊

tokenize 模塊將一段 Python 源文件分割成不一樣的 token . 你能夠在代碼高亮工具中使用它.

注意這裏的 tokenize 函數接受兩個可調用對象做爲參數前一個用於獲取新的代碼行第二個用於在得到每一個 token 時調用.

 

13.17. keyword 模塊

keyword 模塊有一個包含當前 Python 版本所使用的關鍵字的列表它還提供了一個字典以關鍵字做爲 key , 以一個描述性函數做爲 value , 它可用於檢查 給定單詞是不是 Python 關鍵字.

 

13.18. parser 模塊

(可選parser 模塊提供了一個到 Python 內建語法分析器和編譯器的接口.

 

13.19. symbol 模塊

symbol 模塊包含 Python 語法中的非終止符號可能只有你涉及 parser 模塊的時候用到它

 

13.20. token 模塊

token 模塊包含標準 Python tokenizer 所使用的 token 標記

 

14. 其餘模塊

 

14.1. 概覽

本章描述的是一些並不怎麼常見的模塊一些是很實用的另些是已經廢棄的模塊.

 

14.2. pyclbr 模塊

pyclbr 模塊包含一個基本的 Python 類解析器.

版本 1.5.2 改模塊只包含一個 readmodule 函數解析給定模塊返回一個模塊全部頂層類組成的列表.

訪問類實例的屬性能夠得到關於類的更多信息, .

 

14.3. filecmp 模塊

( 2.0 新增filecmp 模塊用於比較文件和目錄

1.5.2 以及先前版本中你可使用 cmp  dircmp 模塊代替.

 

14.4. cmd 模塊

cmd 模塊爲命令行接口( command-line interfaces , CLI )提供了一個簡單的框架它被用在 pdb 模塊中固然你也能夠在本身的程序中使用它

你只須要繼承 Cmd 定義 do  help 方法基類會自動地將這些方法轉換爲對應命令.

 

14.5. rexec 模塊

Feather 版本 2.3 時取消了改模塊的支持具體緣由請參閱 http://www.amk.ca/python/howto/rexec/  http://mail.python.org/pipermail/python-dev/2002-December/031160.html

解決方法請參閱http://mail.python.org/pipermail/python-list/2003-November/234581.html

rexec 模塊提供了在限制環境下的 exec , eval , 以及 import 語句在這個環境下全部可能對機器形成威脅的函數都不可用.

 

14.6. Bastion 模塊

Feather 版本 2.3 時取消了改模塊的支持具體緣由請參閱 http://www.amk.ca/python/howto/rexec/  http://mail.python.org/pipermail/python-dev/2003-January/031848.html

Bastion 模塊容許你控制給定對象如何使用,  你能夠經過它把對象從未限制部分傳遞到限制部分.

默認狀況下全部的實例變量都是隱藏的全部的方法如下劃線開頭.

 

14.7. readline 模塊

(可選readline 模塊使用 GNU readline (或兼容庫)實現了 Unix 下加強的輸入編輯支持

該模塊提供了加強的命令行編輯功能例如命令行歷史等它還加強了 input  raw_input 函數.

 

14.8. rlcompleter 模塊

(可選只用於 Unix ) rlcompleter 模塊爲 readline 模塊提供了單詞自動完成功能.

導入該模塊就能夠啓動自動完成功能默認狀況下完成函數被綁定在了 Esc 鍵上按兩次 Esc 鍵就能夠自動完成當前單詞你可使用下面的代碼修改所綁定的鍵:

import readline readline.parse_and_bind("tab: complete")

 

14.9. statvfs 模塊

statvfs 模塊包含一些與 os.statvfs (可選)函數配合使用的常量和函數該函數會返回文件系統的相關信息

 

14.10. calendar 模塊

calendar 模塊是 Unix cal 命令的 Python 實現它能夠將給定年份/月份的日曆輸出到標準輸出設備上.

prmonth(year, month) 打印給定月份的日曆

 

14.11. sched 模塊

sched 模塊爲非線程環境提供了一個簡單的計劃任務模式.

 

14.12. statcache 模塊

statcache 模塊提供了訪問文件相關信息的相關函數它是 os.stat 的擴展模塊並且它會緩存收集到的信息

2.2 後該模塊被廢棄請使用 os.stat() 函數代替緣由很簡單它致使了更復雜的緩存管理反而下降了性能.

 

14.13. grep 模塊

grep 模塊提供了在文本文件中搜索字符串的另種方法版本 2.1 時被聲明不支持及就是說當前版本已經沒法使用該模塊.

 

14.14. dircache 模塊

(已經廢棄 statcache 相似該模塊是 os.listdir 函數的一個擴展提供了緩存支持可能由於一樣的緣由被廢棄吧~ MUHAHAHAHAHA~~~~ . 請使用 os.listdir 代替

 

14.15. dircmp 模塊

(已廢棄只用於 1.5.2) dircmp 模塊用於比較兩個目錄的內容Python 2.0 該模塊被 filecmp 替換.

 

14.16. cmp 模塊

(已廢棄只用於 1.5.2) cmp 模塊用於比較兩個文件,.

Python 2.0 該模塊被 filecmp 替換.

 

14.17. cmpcache 模塊

(已廢棄只用於 1.5.2) cmpcache 模塊用於比較兩個文件它是 cmp 模塊的擴展提供了緩存支持

Python 2.0 該模塊被 filecmp 替換.

 filecmp 已經不提供緩存支持.

 

14.18. util 模塊

(已廢棄只用於 1.5.2) util 模塊提供了常見操做的封裝函數新代碼可使用如 Examples 14-21 到 14-23 的實現方法.

 

14.19. soundex 模塊

(已廢棄只用於 1.5.2) soundex 實現了一個簡單的 hash 算法基於英文發音將單詞轉換爲 個字符的字符串.

版本 2.0 該模塊已從標準庫中刪除.

get_soundex(word) 返回給定單詞的 soundex 字符串sound_similar(word1, word2) 判斷兩個單詞的 soundex 是否相同通常說來發音類似的單詞有相同的 soundex . 

 

14.20. timing 模塊

(已廢棄只用於 Unix ) timing 用於監控 Python 程序的執行時間time.clock() 能夠替換 time.time() 得到 CPU 時間.

 

14.21. posixfile 模塊

(已廢棄只用於 Unix ) posixfile 提供了一個類文件的對象( file-like object ), 實現了文件鎖定的支持新程序請使用 fcntl 模塊代替.

 

14.22. bisect 模塊

bisect 模塊用於向排序後的序列插入對象.

insort(sequence, item) 將條目插入到序列中而且保證序列的排序序列能夠是任意實現了 _ _getitem_ _  insert 方法的序列對象

bisect(sequence, item) => index 返回條目插入後的索引值不對序列作任何修改

 

14.23. knee 模塊

knee 模塊用於 Python 1.5 中導入包( package import )的實現固然 Python 解釋器已經支持了這個因此這個模塊幾乎沒有什麼做用不過你能夠看看它的代碼明白這一切是怎麼完成的.

代碼請參見 Python-X.tgz/Python-2.4.4/Demo/imputil/knee.py

固然你能夠導入該模塊,

 

14.24. tzparse 模塊

(已廢棄tzparse 模塊用於解析時區標誌( time zone specification ). 導入時它會自動分析 TZ 環境變量

除了這些變量以外該模塊還提供了一些用於時間計算的函數.

 

14.25. regex 模塊

(已廢棄regex 模塊是舊版本的(1.5 )正則表達式模塊,新代碼請使用 re 模塊實現.

注意在 Python 1.5.2  regex  re 模塊要快但在新版本中 re 模塊更快.

 

14.26. regsub 模塊

(已廢棄regsub 模塊提供了基於正則表達式的字符串替換操做新代碼請使用 re 模塊中的 replace 函數代替.

 

14.27. reconvert 模塊

(已廢棄reconvert 提供了舊樣式正則表達式regex 模塊中使用)到新樣式re 模塊)的轉換工具它也能夠做爲一個命令行工具.

 

14.28. regex_syntax 模塊

(已廢棄regex_syntax 模塊用於改變正則表達式的模式.

 

14.29. find 模塊

(已廢棄只用於 1.5.2) find 模塊用於在給定目錄及其子目錄中查找符合給定匹配模式的文件

匹配模式的語法與 fnmatch 中相同.

相關文章
相關標籤/搜索