10. Python 標準函式庫概覽— Python 3.7.13 說明文件

文章推薦指數: 80 %
投票人數:10人

os 模組提供了數十個與作業系統溝通的函式:. >>> >>> import os >>> os.getcwd() # Return the current working directory 'C:\\Python37' > ... 瀏覽 索引 模組| 下一頁| 上一頁| Python» 3.7.13Documentation» Python教學» | 10.Python標準函式庫概覽¶ 10.1.作業系統介面¶ os模組提供了數十個與作業系統溝通的函式: >>>importos >>>os.getcwd()#Returnthecurrentworkingdirectory 'C:\\Python37' >>>os.chdir('/server/accesslogs')#Changecurrentworkingdirectory >>>os.system('mkdirtoday')#Runthecommandmkdirinthesystemshell 0 務必使用importos而非fromosimport*。

這將避免因系統不同而實作有差異的os.open()覆蓋內建函式open()。

在使用os諸如此類大型模組時搭配內建函式dir()和help()是非常有用的: >>>importos >>>dir(os) >>>help(os) 對於日常檔案和目錄管理任務,shutil模組提供了更容易使用的高階介面: >>>importshutil >>>shutil.copyfile('data.db','archive.db') 'archive.db' >>>shutil.move('/build/executables','installdir') 'installdir' 10.2.檔案之萬用字元¶ Theglobmoduleprovidesafunctionformakingfilelistsfromdirectory wildcardsearches: >>>importglob >>>glob.glob('*.py') ['primes.py','random.py','quote.py'] 10.3.命令列引數¶ 通用工具腳本常需要處理命令列引數。

這些引數會以串列形式存放在sys模組的argv此變數中。

例如在命令列執行pythondemo.pyonetwothree會有以下輸出結果: >>>importsys >>>print(sys.argv) ['demo.py','one','two','three'] argparse模块提供了一种更复杂的机制来处理命令行参数。

以下脚本可提取一个或多个文件名,并可选择要显示的行数: importargparse parser=argparse.ArgumentParser(prog='top', description='Showtoplinesfromeachfile') parser.add_argument('filenames',nargs='+') parser.add_argument('-l','--lines',type=int,default=10) args=parser.parse_args() print(args) 当在通过pythontop.py--lines=5alpha.txtbeta.txt在命令行运行时,该脚本会将args.lines设为5并将args.filenames设为['alpha.txt','beta.txt']。

10.4.錯誤輸出重新導向與程式終止¶ sys模組也有stdin,stdout,和stderr等變數。

即使當stdout被重新導向時,後者stderr可輸出發送警告和錯誤訊息。

>>>sys.stderr.write('Warning,logfilenotfoundstartinganewone\n') Warning,logfilenotfoundstartinganewone 終止腳本最直接的方式就是利用sys.exit()。

10.5.字串樣式比對¶ re模組提供正規表示式(regularexpression)做進階的字串處理。

當要處理複雜的比對以及操作時,正規表示式是簡潔且經過最佳化的解決方案。

>>>importre >>>re.findall(r'\bf[a-z]*','whichfootorhandfellfastest') ['foot','fell','fastest'] >>>re.sub(r'(\b[a-z]+)\1',r'\1','catinthethehat') 'catinthehat' 當只需要簡單的字串操作時,因為可讀性以及方便除錯,字串本身的方法是比較建議的。

>>>'teafortoo'.replace('too','two') 'teafortwo' 10.6.數學相關¶ math模組提供了C函式庫中底層的浮點數運算的函式。

>>>importmath >>>math.cos(math.pi/4) 0.70710678118654757 >>>math.log(1024,2) 10.0 random模組提供了隨機選擇的工具。

>>>importrandom >>>random.choice(['apple','pear','banana']) 'apple' >>>random.sample(range(100),10)#samplingwithoutreplacement [30,83,16,4,8,81,41,50,18,33] >>>random.random()#randomfloat 0.17970987693706186 >>>random.randrange(6)#randomintegerchosenfromrange(6) 4 statistics模組提供了替數值資料計算基本統計量(包括平均、中位數、變異量數等)的功能。

>>>importstatistics >>>data=[2.75,1.75,1.25,0.25,0.5,1.25,3.5] >>>statistics.mean(data) 1.6071428571428572 >>>statistics.median(data) 1.25 >>>statistics.variance(data) 1.3720238095238095 Scipy專案上也有許多數值計算相關的模組。

10.7.網路存取¶ Python中有許多存取網路以及處理網路協定。

最簡單的兩個例子包括urllib.request模組可以從網址抓取資料以及smtplib可以用來寄郵件。

: >>>fromurllib.requestimporturlopen >>>withurlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl')asresponse: ...forlineinresponse: ...line=line.decode('utf-8')#Decodingthebinarydatatotext. ...if'EST'inlineor'EDT'inline:#lookforEasternTime ...print(line)
Nov.25,09:43:32PMEST >>>importsmtplib >>>server=smtplib.SMTP('localhost') >>>server.sendmail('[email protected]','[email protected]', ..."""To:[email protected] ...From:[email protected] ... ...BewaretheIdesofMarch. ...""") >>>server.quit() (注意第二個例子中需要在本地端執行一個郵件伺服器) 10.8.日期與時間¶ datetime模組中有許多類別供以操作日期以及時間,從簡單從複雜都有。

模組支援日期與時間的運算,而實作的重點是有效率的成員擷取以達到輸出格式化以及操作。

模組也提供支援時區換算的類別。

>>>#datesareeasilyconstructedandformatted >>>fromdatetimeimportdate >>>now=date.today() >>>now datetime.date(2003,12,2) >>>now.strftime("%m-%d-%y.%d%b%Yisa%Aonthe%ddayof%B.") '12-02-03.02Dec2003isaTuesdayonthe02dayofDecember.' >>>#datessupportcalendararithmetic >>>birthday=date(1964,7,31) >>>age=now-birthday >>>age.days 14368 10.9.資料壓縮¶ 常見的解壓縮以及壓縮格式都有直接支援。

包括:zlib,gzip,bz2,lzma,zipfile以及tarfile。

>>>importzlib >>>s=b'witchwhichhaswhichwitcheswristwatch' >>>len(s) 41 >>>t=zlib.compress(s) >>>len(t) 37 >>>zlib.decompress(t) b'witchwhichhaswhichwitcheswristwatch' >>>zlib.crc32(s) 226805979 10.10.效能量測¶ 有一些Python使用者很想了解同個問題的不同實作方法的效能差異。

Python提供評估了效能差異的工具。

舉例來說,有人可能會試著用tuple的打包機制來交換引數代替傳統的方式。

timeit模組可以迅速地展示效能的進步。

>>>fromtimeitimportTimer >>>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模組則提供了一些在大型的程式碼識別關鍵臨界區間(CriticalSection)的工具。

10.11.品質控管¶ 達到高品質軟體的一個方法當開發時對每個函式寫測試以及在開發過程中要不斷的跑這些測試。

doctest模組提供了一個工具,掃描模組並根據程式中內嵌的文件字符串執行測試。

測試構造如同簡單的將它的輸出結果剪下並貼上到文件字符串中。

通過用戶提供的例子,它強化了文件,允許doctest模塊組認代碼的結果是否與文件一致: defaverage(values): """Computesthearithmeticmeanofalistofnumbers. >>>print(average([20,30,70])) 40.0 """ returnsum(values)/len(values) importdoctest doctest.testmod()#automaticallyvalidatetheembeddedtests unittest模組不像doctest模組這般容易,但是它提供了更完整的測試集並且可以整合在不同的檔案間。

importunittest classTestStatisticalFunctions(unittest.TestCase): deftest_average(self): self.assertEqual(average([20,30,70]),40.0) self.assertEqual(round(average([1,5,7]),1),4.3) withself.assertRaises(ZeroDivisionError): average([]) withself.assertRaises(TypeError): average(20,30,70) unittest.main()#Callingfromthecommandlineinvokesalltests 10.12.標準模組庫¶ "batteriesincluded"是Python設計哲學。

它的好處是可以透過這些套件使用複雜與強大的功能。

例如: 使用xmlrpc.client和xmlrpc.server模組實現遠端控制看似變更為容易。

使用前也不需要先了解相關知識或是掌握XML的技能就能直接透過名稱使用模組。

函式庫email套件用來管理MIME和其他RFC2822相關電子郵件訊息的文件。

相異於其他電子郵件套件smtplib和poplib這些實際用來發送與接收訊息,擁有更完整的工具設置提供建置與解析複雜訊息的結構(包含附件檔案)和實現網路傳送之間的解碼與標頭協定。

函式庫json套件提供JSON資料解析強大的交換格式。

csv模組則提供直接讀寫以逗號分隔值的檔案格式,支援一般資料庫與電子表格。

xml.etree.ElementTree,xml.dom與xml.sax套件則支援XML流程。

綜觀所有,這些模組和套件都簡化了Python應用程式與其他工具之間的資料交換。

sqllite3套件作為包覆SQLite資料庫的函式庫,提供一個一致性的資料庫用來更新與操作使用些微非標準的SQL語法。

有數種支援國際化模組gettext,locale,和codecs等套件。

目录 10.Python標準函式庫概覽 10.1.作業系統介面 10.2.檔案之萬用字元 10.3.命令列引數 10.4.錯誤輸出重新導向與程式終止 10.5.字串樣式比對 10.6.數學相關 10.7.網路存取 10.8.日期與時間 10.9.資料壓縮 10.10.效能量測 10.11.品質控管 10.12.標準模組庫 上個主題 9.类 下個主題 11.标准库简介——第二部分 本頁 提交Bug 顯示原始碼 瀏覽 索引 模組| 下一頁| 上一頁| Python» 3.7.13Documentation» Python教學» |



請為這篇文章評分?