在很多時候,你會想要讓你的程序與用戶(可能是你自己)交互。你會從用戶那里得到輸入,然后打印一些結(jié)果。我們可以分別使用 raw_input 和 print 語句來完成這些功能。對于輸出,你也可以使用多種多樣的 str(字符串)類。例如,你能夠使用 rjust 方法來得到一個按一定寬度右對齊的字符串。利用 help(str)獲得更多詳情。
另一個常用的輸入/輸出類型是處理文件。創(chuàng)建、讀和寫文件的能力是許多程序所必需的,我們將會在這章探索如何實現(xiàn)這些功能。
你可以通過創(chuàng)建一個 file 類的對象來打開一個文件,分別使用 file 類的 read、readline 或 write 方法來恰當?shù)刈x寫文件。對文件的讀寫能力依賴于你在打開文件時指定的模式。最后,當你完成對文件的操作的時候,你調(diào)用 close 方法來告訴 Python 我們完成了對文件的使用。
例 12.1 使用文件
#!/usr/bin/python
# Filename: using_file.py
poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''
f = file('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file
f = file('poem.txt')
# if no mode is specified, 'r'ead mode is assumed by default
while True:
line = f.readline()
if len(line) == 0: # Zero length indicates EOF
break
print line,
# Notice comma to avoid automatic newline added by Python
f.close() # close the file
(源文件:code/using_file.py)
輸出
$ python using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
它如何工作
首先,我們通過指明我們希望打開的文件和模式來創(chuàng)建一個 file 類的實例。模式可以為讀模式('r')、寫模式('w')或追加模式('a')。事實上還有多得多的模式可以使用,你可以使用 help(file)來了解它們的詳情。
我們首先用寫模式打開文件,然后使用 file 類的 write 方法來寫文件,最后我們用 close 關(guān)閉這個文件。
接下來,我們再一次打開同一個文件來讀文件。如果我們沒有指定模式,讀模式會作為默認的模式。在一個循環(huán)中,我們使用 readline 方法讀文件的每一行。這個方法返回包括行末換行符的一個完整行。所以,當一個 空的 字符串被返回的時候,即表示文件末已經(jīng)到達了,于是我們停止循環(huán)。
注意,因為從文件讀到的內(nèi)容已經(jīng)以換行符結(jié)尾,所以我們在 print 語句上使用逗號來消除自動換行。最后,我們用 close 關(guān)閉這個文件。
現(xiàn)在,來看一下 poem.txt 文件的內(nèi)容來驗證程序確實工作正常了
Python 提供一個標準的模塊,稱為 pickle。使用它你可以在一個文件中儲存任何 Python 對象,之后你又可以把它完整無缺地取出來。這被稱為 持久地 儲存對象。
還有另一個模塊稱為 cPickle,它的功能和 pickle 模塊完全相同,只不過它是用 C 語言編寫的,因此要快得多(比pickle 快 1000 倍)。你可以使用它們中的任一個,而我們在這里將使用 cPickle 模塊。記住,我們把這兩個模塊都簡稱為 pickle 模塊。
例 12.2 儲存與取儲存
#!/usr/bin/python
# Filename: pickling.py
import cPickle as p
#import pickle as p
shoplistfile = 'shoplist.data'
# the name of the file where we will store the object
shoplist = ['apple', 'mango', 'carrot']
# Write to the file
f = file(shoplistfile, 'w')
p.dump(shoplist, f) # dump the object to a file
f.close()
del shoplist # remove the shoplist
# Read back from the storage
f = file(shoplistfile)
storedlist = p.load(f)
print storedlist
(源文件:code/pickling.py)
輸出
$ python pickling.py
['apple', 'mango', 'carrot']
它如何工作
首先,請注意我們使用了 import..as 語法。這是一種便利方法,以便于我們可以使用更短的模塊名稱。在這個例子中,它還讓我們能夠通過簡單地改變一行就切換到另一個模塊(cPickle 或者 pickle)!在程序的其余部分的時候,我們簡單地把這個模塊稱為 p。
為了在文件里儲存一個對象,首先以寫模式打開一個 file 對象,然后調(diào)用儲存器模塊的 dump 函數(shù),把對象儲存到打開的文件中。這個過程稱為 儲存 。
接下來,我們使用 pickle 模塊的 load 函數(shù)的返回來取回對象。這個過程稱為 取儲存 。
我們已經(jīng)討論了多種類型的輸入/輸出,及文件處理和使用儲存器模塊。
接下來,我們將探索異常的概念。