Python3.4 Tutorial10 - Brief Tour of the Standard Library
10 標準庫簡介
10.1 作業系統介面(Operating System Interface)
os
模組提供了許多和作業系統互動的函式:
>>> import os >>> os.getcwd() # Return the current working directory 'C:\\Python34' >>> os.chdir('/server/accesslogs') # Change current working directory >>> os.system('mkdir today') # Run the command mkdir in the system shell 0
請確保使用import os
風格的模組匯入,而不是from os import *
。這是為了保證os.open()和內建的open()函式互不影響,它們操作有很大差別。
在使用像os這樣的大型模組時,內建的dir()和help()函式是很有用的互動式助手:
>>> import os >>> dir(os) <returns a list of all module functions> >>> help(os) <returns an extensive manual page created from the module's docstrings>
處理日常的檔案、目錄管理任務時,shutil
模組提供了易用的高層介面:
>>> import shutil >>> shutil.copyfile('data.db', 'archive.db') 'archive.db' >>> shutil.move('/build/executables', 'installdir') 'installdir'
10.2 檔案萬用字元(File Wildcards)
glob
模組提供了一個根據檔案萬用字元查詢檔案列表的函式:
>>> import glob >>> glob.glob('*.py') ['primes.py', 'random.py', 'quote.py']
10.3 命令列引數(Command Line Arguments)
通用的工具指令碼通常都需要處理命令列的引數。這些引數作為list儲存在sys模組中的argv屬性中。例如,下面輸出在命令列中執行python demo.py one two three
後的結果:
>>> import sys >>> print(sys.argv) ['demo.py', 'one', 'two', 'three']
getopt模組使用方便的Unix函式getopt()處理sys.argv。argparse模組提供了更加強大、靈活的命令列處理。
10.4 錯誤輸出重定向和程式終止
sys模組還有stdin,stdout和stderr等屬性。後者在傳送警告、錯誤訊息時時很有用的,即使stdout已經重定向了它們(錯誤訊息)也可以被看到:
>>> sys.stderr.write('Warning, log file not found starting a new one\n') Warning, log file not found starting a new one
終止指令碼最直接的方式是使用sys.exit()
。
10.5 字串模式匹配
re
模組為高階字串處理提供了正規表示式工具。對於複雜的匹配和操作,正規表示式提供了簡潔、有效的方案:
>>> import re >>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest') ['foot', 'fell', 'fastest'] >>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat') 'cat in the hat'
只需要簡單功能的時侯,使用string的方法更合適,因為它們可讀性更高,debug也方便:
>>> 'tea for too'.replace('too', 'two') 'tea for two'
10.6 數學
在處理浮點運算時,math
模組提供了對底層C函式庫的訪問:
>>> import math >>> math.cos(math.pi / 4) 0.70710678118654757 >>> math.log(1024, 2) 10.0
random
模組提供了隨機選擇的功能:
>>> import random >>> random.choice(['apple', 'pear', 'banana']) 'apple' >>> random.sample(range(100), 10) # sampling without replacement [30, 83, 16, 4, 8, 81, 41, 50, 18, 33] >>> random.random() # random float 0.17970987693706186 >>> random.randrange(6) # random integer chosen from range(6) 4
SciPy專案http://scipy.org中還有很多數學計算方面的其他模組。
10.7 網際網路訪問
有很多模組可以訪問網際網路,處理網路協議。最簡單的兩個是urllib.request
用來從URL中接受資料,和smtplib
用來傳送郵件:
>>> from urllib.request import urlopen >>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'): ... line = line.decode('utf-8') # Decoding the binary data to text. ... if 'EST' in line or 'EDT' in line: # look for Eastern Time ... print(line) <BR>Nov. 25, 09:43:32 PM EST >>> import smtplib >>> server = smtplib.SMTP('localhost') >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org', ... """To: jcaesar@example.org ... From: soothsayer@example.org ... ... Beware the Ides of March. ... """) >>> server.quit()
(注意,第二個例子需要在localhost上執行郵件伺服器。)
10.8 日期和時間
datetime
模組提供了簡單和複雜的處理日期和時間兩種的方法。雖然日期和時間是支援運算的,但實現的重點是在格式化輸出和操作時能夠高效的提取成員。該模組還支援時區處理:
>>> # dates are easily constructed and formatted >>> from datetime import date >>> now = date.today() >>> now datetime.date(2003, 12, 2) >>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.") '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.' >>> # dates support calendar arithmetic >>> birthday = date(1964, 7, 31) >>> age = now - birthday >>> age.days 14368
10.9 資料壓縮
常用的資料歸檔和壓縮格式都是由以下模組直接支援的:zlib, gzip, bz2, lzma, zipfile和tarfile。
>>> import zlib >>> s = b'witch which has which witches wrist watch' >>> len(s) 41 >>> t = zlib.compress(s) >>> len(t) 37 >>> zlib.decompress(t) b'witch which has which witches wrist watch' >>> zlib.crc32(s) 226805979
10.10 效能度量(Performance Measurement)
一些Python使用者,對解決相同問題的不同方式的效能差別很感興趣。Python提供了一個度量工具,可以立即解決這個問題。
例如,可能嘗試用元組的打包和解包特性來代替傳統的引數交換。timeit模組可以快速展示出適度的效能優勢(原文:The timeit module quickly demonstrates a modest performance advantage):
>>> from timeit import Timer >>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit() 0.57535828626024577 >>> Timer('a,b = b,a', 'a=1; b=2').timeit() 0.54962537085770791
相對於timeit的細粒度,profile和pstats模組提供了在更大的程式碼塊中識別關鍵部分的工具。
10.11 質量控制(Quality Control)
開發高質量軟體的一個方法是,在每個函式開發完成後為它編寫測試,並且在開發過程中經常執行這些測試。
doctest
模組提供了一個工具,它可以掃描一個模組,驗證嵌入在程式docstring中的測試。測試結構和將一個典型的呼叫和它的結果複製貼上到docstring一樣簡單。這種方式提高了文件的作用,它為使用者提供一個使用的例子,還可以讓doctest模組確定當前程式碼和這份文件是一致的:
def average(values): """Computes the arithmetic mean of a list of numbers. >>> print(average([20, 30, 70])) 40.0 """ return sum(values) / len(values) import doctest doctest.testmod() # automatically validate the embedded tests
unittest
模組就不像doctest
模組這麼簡單了,但是它允許在一個單獨的檔案中進行更全面的測試:
import unittest class TestStatisticalFunctions(unittest.TestCase): def test_average(self): self.assertEqual(average([20, 30, 70]), 40.0) self.assertEqual(round(average([1, 5, 7]), 1), 4.3) with self.assertRaises(ZeroDivisionError): average([]) with self.assertRaises(TypeError): average(20, 30, 70) unittest.main() # Calling from the command line invokes all tests
10.12 自備電池(Batteries Included)
Python有一個“自備電池”的哲學。這通過它的大型包的複雜性和魯棒性就可以看出來。例如:
xmlrpc.client
和xmlrpc.server
模組使執行遠端過程呼叫成一個幾乎微不足道的任務。儘管名字是這樣,但沒有直接處理XML或需要這方面的知識。email
包是一個管理郵件訊息的庫,包括MIME和其它基於RFC 2822的訊息文件。它不像smtplib和poplib會實際進行收發訊息的操作,email包有一個完整的構建或者解碼複雜訊息結構的工具包(包括附件),用於實現網路編碼和頭協議。xml.dom
和xml.sax
包為解析這種流行的資料交換格式提供了強大的支援。同樣,csv模組支援直接讀寫通用資料庫格式。總的來說,這些模組和包大大簡化了Python應用程式和其它工具之間的資料交換。- 國際化被大量的模組所支援,其中包括
gettext
、locale
和codecs
。
相關文章
- Python3.4 Tutorial11 - Brief Tour of the Standard Library – Part IIPython
- Go Standard library - flagGo
- Go Standard library - stringsGo
- C++ Standard Library擴充建議... (轉)C++
- Beyond the C++ Standard Library電子書pdf下載C++
- 演算法競賽向 C++ Standard Library 使用速查演算法C++
- 什麼BRIEF演算法?BRIEF演算法詳解演算法
- A tour of Go例程疑惑Go
- error: #error This file requires compiler and library support for the ISO C++ 2011 standard.ErrorUICompileC++
- a brief history of AI: reign of chaosAI
- 安裝golang tour,提示錯誤Golang
- A Brief Introduce of Database Index(索引簡介)DatabaseIndex索引
- A Brief Look at C++ 中文版 (轉)C++
- Standard Database AuditingDatabase
- python3.4之決策樹Python
- abc369E Sightseeing Tour
- Python3.5.2 document學習系列之03、The Python Standard Library(python 標準庫)——內建函式Python函式
- C++ coding standardC++
- .NET Standard是什麼
- python3.4支援xp麼Python
- A tour of Go 中關於 Web Crawler 的解答GoWeb
- Swift學習——A Swift Tour 資料型別Swift資料型別
- dis ip int brief命令的作用是什麼?
- Standard Functions Used in SAP Retail with ArticlesFunctionAI
- python3.4連線oracle資料庫PythonOracle資料庫
- Python3.4 Tutorial9 - Classes (Part 3)Python
- Python3.4 Tutorial9 - Classes (Part 4)Python
- Python3.4 Tutorial9 - Classes (Part 2)Python
- Python3.4 Tutorial9 - Classes (Part 1)Python
- Insider Dev Tour(2018.06.28)IDEdev
- Brief description of Oracle physical standby database configuration and managementOracleDatabase
- Brief description of Oracle physical standby database configuration and managemeOracleDatabase
- Python3.4中文手冊chm地址Python
- emacs作為python3.4 IDE的配置MacPythonIDE
- .NET Standard 類庫的使用技巧
- Standard directory layout for maven project contentMavenProject
- Eslint Standard Style語法規則EsLint
- 釋出 Rafy .NET Standard 版本 Nuget 包