最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解 Python 與文件對象共事的實例

 更新時間:2017年09月11日 11:11:42   作者:lxgwm2008  
這篇文章主要介紹了詳解 Python 與文件對象共事的實例的相關資料,希望通過本文大家能掌握這部分內容,需要的朋友可以參考下

詳解 Python 與文件對象共事的實例

Python 有一個內置函數(shù),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 方法可以接收三個參數(shù):文件名、模式和緩沖區(qū)參數(shù)。只有第一個參數(shù) (文件名) 是必須的;其它兩個是可選的。如果沒有指定,文件以文本方式打開。這里我們以二進制方式打開文件進行讀取。(print open.__doc__ 會給出所有可能模式的很好的解釋。)
(2)  open 函數(shù)返回一個對象 (到現(xiàn)在為止,這一點應該不會使你感到吃驚)。一個文件對象有幾個有用的屬性。
(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)  一個文件對象維護它所打開文件的狀態(tài)。文件對象的 tell 方法告訴你在被打開文件中的當前位置。因為我們還沒有對這個文件做任何事,當前位置為 0,它是文件的起始處。
(2)  文件對象的 seek 方法在被打開文件中移動到另一個位置。第二個參數(shù)指出第一個參數(shù)是什么意思:0 表示移動到一個絕對位置 (從文件起始處算起),1 表示移到一個相對位置 (從當前位置算起),還有 2 表示相對于文件尾的位置。因為我們搜索的 MP3 標記保存在文件的末尾,我們使用 2 并且告訴文件對象從文件尾移動到 128 字節(jié)的位置。
(3)  tell 方法確認了當前位置已經(jīng)移動了。
(4)  read 方法從被打開文件中讀取指定個數(shù)的字節(jié),并且返回含有讀取數(shù)據(jù)的字符串??蛇x參數(shù)指定了讀取的最大字節(jié)數(shù)。如果沒有指定參數(shù),read 將讀到文件末尾。(我們本可以在這里簡單地說 read() ,因為我們確切地知道在文件的何處,事實上,我們讀的是最后 128 個字節(jié)。) 讀出的數(shù)據(jù)賦給變量 tagData,并且當前的位置根據(jù)所讀的字節(jié)數(shù)作了修改。
(5)  tell 方法確認了當前位置已經(jīng)移動了。如果做一下算術,你會看到在讀了 128 個字節(jié)之后,位置數(shù)已經(jīng)增加了 128。

2. 關閉文件

打開文件消耗系統(tǒng)資源,并且其間其它程序可能無法訪問它們 (取決于文件模式)。這就是一旦操作完畢就該關閉文件的重要所在。

>>> f 
<open file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988> 
>>> f.closed    (1) 
False 
>>> f.close()   (2) 
>>> f 
<closed file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988> 
>>> f.closed    (3) 
True 
>>> f.seek(0)   (4) 
Traceback (innermost last): 
- 100 -Dive Into Python http://diveintopython.org/ 
 File "<interactive input>", line 1, in ? 
ValueError: I/O operation on closed file 
>>> f.tell() 
Traceback (innermost last): 
 File "<interactive input>", line 1, in ? 
ValueError: I/O operation on closed file 
>>> f.read() 
Traceback (innermost last): 
 File "<interactive input>", line 1, in ? 
ValueError: I/O operation on closed file 
>>> f.close()   (5) 

(1)  文件對象的 closed 屬性表示對象是打開還是關閉了文件。在本例中,文件仍然打開著 (closed 是 False)。

(2)  為了關閉文件,調用文件對象的 close 方法。這樣就釋放掉你加在文件上的鎖 (如果有的話),刷新被緩沖的系統(tǒng)還未寫入的輸出 (如果有的話),并且釋放系統(tǒng)資源。

(3)  closed 屬性證實了文件被關閉了。

(4)  文件被關閉了,但這并不意味著文件對象不再存在。變量 f 將繼續(xù)存在,直到它超出作用域或被手工刪除。然而,一旦文件被關閉,操作它的方法就沒有一個能使用;它們都會引發(fā)異常。

(5)  對一個文件已經(jīng)關閉的文件對象調用 close 不會 引發(fā)異常,它靜靜地失敗。

3. 處理  I/O 錯誤

現(xiàn)在你已經(jīng)足能理解前一章的例子程序 fileinfo.py 的文件處理代碼了。下面這個例子展示了如何安全地打開文件和讀取文件,以及優(yōu)美地處理錯誤。

try:                (1) 
      fsock = open(filename, "rb", 0) (2) 
      try:               
        fsock.seek(-128, 2)     (3) 
        tagdata = fsock.read(128)  (4) 
      finally:            (5) 
        fsock.close()        
      . 
      . 
      . 
    except IOError:           (6) 
      pass        

(1)  因為打開和讀取文件有風險,并且可能引發(fā)異常,所有這些代碼都用一個 try...except 塊封裝。(嘿,標準化的縮近不好嗎?這就是你開始欣賞它的地方。)
(2)  open 函數(shù)可能引發(fā) IOError 異常。(可能是文件不存在。)
(3)  seek 方法可能引發(fā) IOError 異常。(可能是文件長度小于 128 字節(jié)。)
(4)  read 方法可能引發(fā) IOError 異常。(可能磁盤有壞扇區(qū),或它在一個網(wǎng)絡驅動器上,而網(wǎng)絡剛好斷了。)
(5)  這是新的:一個 try...finally 塊。一旦文件通過 open 函數(shù)被成功地打開,我們應該絕對保證把它關閉,即使是在 seek 或 read 方法引發(fā)了一個異常時。try...finally 塊可以用來:在 finally 塊中的代碼將
總是 被執(zhí)行,甚至某些東西在 try 塊中引發(fā)一個異常也會執(zhí)行??梢赃@樣考慮,不管在路上發(fā)生什么,代碼都會被 “即將滅亡” 地執(zhí)行。
(6)  最后,處理我們的 IOError 異常。它可能是由調用 open、seek 或 read 引發(fā)的 IOError 異常。這里,我們其實不用關心,因為將要做的事就是靜靜地忽略它然后繼續(xù)。(記住,pass 是一條不做任何事的 Python 語句。) 這樣完全合法,“處理” 一個異??梢悦鞔_表示不做任何事。它仍然被認為處理過了,并且處理將正常繼續(xù),從 try...except 塊的下一行代碼開始。

4. 寫入文件

正如你所期待的,你也能用與讀取文件同樣的方式寫入文件。有兩種基本的文件模式:

• 追加 (Append) 模式將數(shù)據(jù)追加到文件尾。
• 寫入 (write) 模式將覆蓋文件的原有內容。

如果文件還不存在,任意一種模式都將自動創(chuàng)建文件,因此從來不需要任何復雜的邏輯:“如果 log 文件還不存在,將創(chuàng)建一個新的空文件,正因為如此,你可以第一次就打開它”。打開文件并開始寫就可以了。

>>> logfile = open('test.log', 'w') (1) 
>>> logfile.write('test succeeded') (2) 
>>> logfile.close() 
>>> print file('test.log').read()  (3) 
test succeeded 
>>> logfile = open('test.log', 'a') (4) 
- 102 -Dive Into Python http://diveintopython.org/ 
>>> logfile.write('line 2') 
>>> logfile.close() 
>>> print file('test.log').read()  (5) 
test succeededline 2 

(1)  你可以大膽地開始創(chuàng)建新文件 test.log 或覆蓋現(xiàn)有文件,并為寫入目的而打開它。(第二個參數(shù) "w" 的意思是為文件寫入而打開。) 是的,它和想象中的一樣危險。我希望你不要關心文件以前的內容,因為它現(xiàn)在已經(jīng)不存在了。

(2)  你可以使用 open 返回的文件對象的 write 方法向一個新打開的文件添加數(shù)據(jù)。

(3)  file 是 open 的同義語。這一行語句打開文件,讀取內容,并打印它們。

(4)  碰巧你知道 test.log 存在 (因為你剛向它寫完了數(shù)據(jù)),所以你可以打開它并向其追加數(shù)據(jù)。("a" 參數(shù)的意思是為追加目的打開文件。) 實際上即使文件不存在你也可以這樣做,因為以追加方式打開一文件時,如果需要的話會創(chuàng)建文件。但是追加操作從不 損壞文件的現(xiàn)有內容。

(5)  正如你所看到的,原來的行和你以追加方式寫入的第二行現(xiàn)在都在 test.log 中了。同時注意兩行之間并沒包含回車符。因為兩次寫入文件時都沒有明確地寫入回車符,所以文件中沒有包含回車符。你可以用 "\n" 寫入回車符。因為你沒做這項工作,所以你寫到文件的所有內容都將顯示在同一行上。

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • 超詳細Python文件操作命令知識

    超詳細Python文件操作命令知識

    最近在寫的程序頻繁地與文件操作打交道,所以想著給大家總結下,這篇文章主要給大家介紹了關于Python文件操作命令的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Anaconda之conda常用命令介紹(安裝、更新、刪除)

    Anaconda之conda常用命令介紹(安裝、更新、刪除)

    這篇文章主要介紹了Anaconda之conda常用命令介紹,主要包括安裝、更新、刪除等,需要的朋友可以參考下
    2019-10-10
  • Python實現(xiàn)遠程調用MetaSploit的方法

    Python實現(xiàn)遠程調用MetaSploit的方法

    這篇文章主要介紹了Python實現(xiàn)遠程調用MetaSploit的方法,是很有借鑒價值的一個技巧,需要的朋友可以參考下
    2014-08-08
  • JupyterNotebook 如何調整輸出窗口的顯示效果

    JupyterNotebook 如何調整輸出窗口的顯示效果

    這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調整實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • python使用rstrip函數(shù)刪除字符串末位字符

    python使用rstrip函數(shù)刪除字符串末位字符

    rstrip函數(shù)用于刪除字符串末位指定字符,默認為空白符,這篇文章主要介紹了python使用rstrip函數(shù)刪除字符串末位字符的方法,需要的朋友可以參考下
    2023-04-04
  • python使用openCV遍歷文件夾里所有視頻文件并保存成圖片

    python使用openCV遍歷文件夾里所有視頻文件并保存成圖片

    這篇文章主要介紹了python使用openCV遍歷文件夾里所有視頻文件并保存成圖片,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-01-01
  • Python?pandas按行、按列遍歷DataFrame的幾種方式

    Python?pandas按行、按列遍歷DataFrame的幾種方式

    在python的DataFrame中,因為數(shù)據(jù)中可以有多個行和列,而且每行代表一個數(shù)據(jù)樣本,我們可以將DataFrame看作數(shù)據(jù)表,那你知道如何按照數(shù)據(jù)表中的行遍歷嗎,下面這篇文章主要給大家介紹了關于Python?pandas按行、按列遍歷DataFrame的幾種方式,需要的朋友可以參考下
    2022-09-09
  • python?skimage圖像處理

    python?skimage圖像處理

    這篇文章主要為大家介紹了python?skimage圖像處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 用Python解析XML的幾種常見方法的介紹

    用Python解析XML的幾種常見方法的介紹

    這篇文章主要介紹了用Python解析XML的幾種常見方法,包括快速的使用ElementTree模塊等方法的實例介紹,需要的朋友可以參考下
    2015-04-04
  • Python中numpy.pad()函數(shù)的使用詳解

    Python中numpy.pad()函數(shù)的使用詳解

    這篇文章主要介紹了Python中numpy.pad()函數(shù)的使用詳解,在卷積神經(jīng)網(wǎng)絡中,為了避免卷積運算導致輸出圖像縮小和圖像邊緣信息丟失,常常采用圖像邊緣填充技術,即在圖像四周邊緣填充0,使得卷積運算后圖像大小不會縮小,同時也不會丟失邊緣和角落的信息,需要的朋友可以參考下
    2023-10-10

最新評論

芦溪县| 苍南县| 安图县| 平顺县| 永修县| 闽侯县| 抚州市| 思茅市| 富平县| 个旧市| 临高县| 衡山县| 柯坪县| 原平市| 民丰县| 东方市| 分宜县| 商都县| 清苑县| 安宁市| 永春县| 固阳县| 玉门市| 曲松县| 衡阳县| 曲阳县| 江油市| 盘山县| 泽普县| 安庆市| 搜索| 屏边| 宁南县| 万全县| 漯河市| 黄浦区| 仁布县| 临澧县| 攀枝花市| 西盟| 广宗县|