Python 標(biāo)準(zhǔn)庫是隨 Python 附帶安裝的,它包含大量極其有用的模塊。熟悉 Python 標(biāo)準(zhǔn)庫是十分重要的,因?yàn)槿绻闶煜み@些庫中的模塊,那么你的大多數(shù)問題都可以簡(jiǎn)單快捷地使用它們來解決。
我們已經(jīng)研究了一些這個(gè)庫中的常用模塊。你可以在 Python 附帶安裝的文檔的“庫參考”一節(jié)中了解 Python 標(biāo)準(zhǔn)庫中所有模塊的完整內(nèi)容。
sys 模塊包含系統(tǒng)對(duì)應(yīng)的功能。我們已經(jīng)學(xué)習(xí)了 sys.argv 列表,它包含命令行參數(shù)。
例 14.1 使用 sys.argv
#!/usr/bin/python
# Filename: cat.py
import sys
def readfile(filename):
'''Print a file to the standard output.'''
f = file(filename)
while True:
line = f.readline()
if len(line) == 0:
break
print line, # notice comma
f.close()
# Script starts from here
if len(sys.argv) < 2:
print 'No action specified.'
sys.exit()
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
# fetch sys.argv[1] but without the first two characters
if option == 'version':
print 'Version 1.2'
elif option == 'help':
print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help: Display this help'''
else:
print 'Unknown option.'
sys.exit()
else:
for filename in sys.argv[1:]:
readfile(filename)
(源文件:code/cat.py)
輸出
$ python cat.py
No action specified.
$ python cat.py --help
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help : Display this help
$ python cat.py --version
Version 1.2
$ python cat.py --nonsense
Unknown option.
$ python cat.py poem.txt
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
它如何工作
這個(gè)程序用來模范 Linux/Unix 用戶熟悉的 cat 命令。你只需要指明某些文本文件的名字,這個(gè)程序會(huì)把它們打印輸出。
在 Python 程序運(yùn)行的時(shí)候,即不是在交互模式下,在 sys.argv 列表中總是至少有一個(gè)項(xiàng)目。它就是當(dāng)前運(yùn)行的程序名稱,作為 sys.argv[0](由于 Python 從 0 開始計(jì)數(shù))。其他的命令行參數(shù)在這個(gè)項(xiàng)目之后。
為了使這個(gè)程序?qū)τ脩舾佑押?,我們提供了一些用戶可以指定的選項(xiàng)來了解更多程序的內(nèi)容。我們使用第一個(gè)參數(shù)來檢驗(yàn)我們的程序是否被指定了選項(xiàng)。如果使用了--version 選項(xiàng),程序的版本號(hào)將被打印出來。類似地,如果指定了--help 選項(xiàng),我們提供一些關(guān)于程序的解釋。我們使用 sys.exit 函數(shù)退出正在運(yùn)行的程序。和以往一樣,你可以看一下 help(sys.exit)來了解更多詳情。
如果沒有指定任何選項(xiàng),而是為程序提供文件名的話,它就簡(jiǎn)單地打印出每個(gè)文件地每一行,按照命令行中的順序一個(gè)文件接著一個(gè)文件地打印。
順便說一下,名稱 cat 是 concatenate 的縮寫,它基本上表明了程序的功能——它可以在輸出打印一個(gè)文件或者把兩個(gè)或兩個(gè)以上文件連接/級(jí)連在一起打印。
sys.version 字符串給你提供安裝的 Python 的版本信息。sys.version_info 元組則提供一個(gè)更簡(jiǎn)單的方法來使你的程序具備 Python 版本要求功能。
[swaroop@localhost code]$ python
>>> import sys
>>> sys.version
'2.3.4 (#1, Oct 26 2004, 16:42:40) \n[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)]'
>>> sys.version_info
(2, 3, 4, 'final', 0)
對(duì)于有經(jīng)驗(yàn)的程序員,sys 模塊中其他令人感興趣的項(xiàng)目有 sys.stdin、sys.stdout 和 sys.stderr 它們分別對(duì)應(yīng)你的程序的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤流。
這個(gè)模塊包含普遍的操作系統(tǒng)功能。如果你希望你的程序能夠與平臺(tái)無關(guān)的話,這個(gè)模塊是尤為重要的。即它允許一個(gè)程序在編寫后不需要任何改動(dòng),也不會(huì)發(fā)生任何問題,就可以在 Linux 和 Windows 下運(yùn)行。一個(gè)例子就是使用 os.sep 可以取代操作系統(tǒng)特定的路徑分割符。
下面列出了一些在 os 模塊中比較有用的部分。它們中的大多數(shù)都簡(jiǎn)單明了。
os.name 字符串指示你正在使用的平臺(tái)。比如對(duì)于 Windows,它是'nt',而對(duì)于 Linux/Unix 用戶,它是'posix'。
os.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前 Python 腳本工作的目錄路徑。
os.getenv()和 os.putenv()函數(shù)分別用來讀取和設(shè)置環(huán)境變量。
os.listdir()返回指定目錄下的所有文件和目錄名。
os.remove()函數(shù)用來刪除一個(gè)文件。
os.system()函數(shù)用來運(yùn)行 shell 命令。
os.linesep 字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows 使用'\r\n',Linux 使用'\n'而 Mac 使用'\r'。
>>> os.path.split('/home/swaroop/byte/code/poem.txt')
('/home/swaroop/byte/code', 'poem.txt')
你可以利用 Python 標(biāo)準(zhǔn)文檔去探索更多有關(guān)這些函數(shù)和變量的詳細(xì)知識(shí)。你也可以使用 help(sys)等等。
我們已經(jīng)學(xué)習(xí)了 Python 標(biāo)準(zhǔn)庫中的 sys 模塊和 os 模塊的一部分功能。你應(yīng)該利用 Python 標(biāo)準(zhǔn)文檔去學(xué)習(xí)這兩個(gè)模塊以及其他模塊的更多內(nèi)容。
接下來,我們將要學(xué)習(xí) Python 中剩余的幾個(gè)方面的內(nèi)容,從而使我們的 Python 課程更加 完整 。