詳解 Python 與文件對象共事的實例
Python 有一個內置函數,open,用來打開在磁盤上的文件。open 返回一個文件對象,它擁有一些方法和屬性,可以得到被打開文件的信息,以及對被打開文件進行操作。
>>> f = open("/music/_singles/kairo.mp3", "rb") (1) >>> f (2) <open file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988> >>> f.mode (3) 'rb' >>> f.name (4) '/music/_singles/kairo.mp3' (1) open 方法可以接收三個參數:文件名、模式和緩沖區參數。只有第一個參數 (文件名) 是必須的;其它兩個是可選的。如果沒有指定,文件以文本方式打開。這里我們以二進制方式打開文件進行讀取。(print open.__doc__ 會給出所有可能模式的很好的解釋。)
(2) open 函數返回一個對象 (到現在為止,這一點應該不會使你感到吃驚)。一個文件對象有幾個有用的屬性。
(3) 文件對象的 mode 屬性告訴你文件以何種模式被打開。
(4) 文件對象的 name 屬性告訴你文件對象所打開的文件名。
1. 讀取文件
你打開文件之后,你要做的第一件事是從中讀取,正如下一個例子所展示的。
>>> f <open file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988> >>> f.tell() (1) 0 >>> f.seek(-128, 2) (2) >>> f.tell() (3) 7542909 >>> tagData = f.read(128) (4) - 99 -Dive Into Python http://diveintopython.org/ >>> tagData 'TAGKAIRO****THE BEST GOA ***DJ MARY-JANE*** Rave Mix 2000http://mp3.com/DJMARYJANE /037' >>> f.tell() (5) 7543037
(1) 一個文件對象維護它所打開文件的狀態。文件對象的 tell 方法告訴你在被打開文件中的當前位置。因為我們還沒有對這個文件做任何事,當前位置為 0,它是文件的起始處。
(2) 文件對象的 seek 方法在被打開文件中移動到另一個位置。第二個參數指出第一個參數是什么意思:0 表示移動到一個絕對位置 (從文件起始處算起),1 表示移到一個相對位置 (從當前位置算起),還有 2 表示相對于文件尾的位置。因為我們搜索的 MP3 標記保存在文件的末尾,我們使用 2 并且告訴文件對象從文件尾移動到 128 字節的位置。
(3) tell 方法確認了當前位置已經移動了。
(4) read 方法從被打開文件中讀取指定個數的字節,并且返回含有讀取數據的字符串。可選參數指定了讀取的最大字節數。如果沒有指定參數,read 將讀到文件末尾。(我們本可以在這里簡單地說 read() ,因為我們確切地知道在文件的何處,事實上,我們讀的是最后 128 個字節。) 讀出的數據賦給變量 tagData,并且當前的位置根據所讀的字節數作了修改。
新聞熱點
疑難解答