亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解 Python 與文件對(duì)象共事的實(shí)例

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

詳解 Python 與文件對(duì)象共事的實(shí)例

Python 有一個(gè)內(nèi)置函數(shù),open,用來(lái)打開(kāi)在磁盤上的文件。open 返回一個(gè)文件對(duì)象,它擁有一些方法和屬性,可以得到被打開(kāi)文件的信息,以及對(duì)被打開(kāi)文件進(jìn)行操作。

>>> 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 方法可以接收三個(gè)參數(shù):文件名、模式和緩沖區(qū)參數(shù)。只有第一個(gè)參數(shù) (文件名) 是必須的;其它兩個(gè)是可選的。如果沒(méi)有指定,文件以文本方式打開(kāi)。這里我們以二進(jìn)制方式打開(kāi)文件進(jìn)行讀取。(print open.__doc__ 會(huì)給出所有可能模式的很好的解釋。)
(2)  open 函數(shù)返回一個(gè)對(duì)象 (到現(xiàn)在為止,這一點(diǎn)應(yīng)該不會(huì)使你感到吃驚)。一個(gè)文件對(duì)象有幾個(gè)有用的屬性。
(3)  文件對(duì)象的 mode 屬性告訴你文件以何種模式被打開(kāi)。
(4)  文件對(duì)象的 name 屬性告訴你文件對(duì)象所打開(kāi)的文件名。

1. 讀取文件

你打開(kāi)文件之后,你要做的第一件事是從中讀取,正如下一個(gè)例子所展示的。

>>> 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)  一個(gè)文件對(duì)象維護(hù)它所打開(kāi)文件的狀態(tài)。文件對(duì)象的 tell 方法告訴你在被打開(kāi)文件中的當(dāng)前位置。因?yàn)槲覀冞€沒(méi)有對(duì)這個(gè)文件做任何事,當(dāng)前位置為 0,它是文件的起始處。
(2)  文件對(duì)象的 seek 方法在被打開(kāi)文件中移動(dòng)到另一個(gè)位置。第二個(gè)參數(shù)指出第一個(gè)參數(shù)是什么意思:0 表示移動(dòng)到一個(gè)絕對(duì)位置 (從文件起始處算起),1 表示移到一個(gè)相對(duì)位置 (從當(dāng)前位置算起),還有 2 表示相對(duì)于文件尾的位置。因?yàn)槲覀兯阉鞯?MP3 標(biāo)記保存在文件的末尾,我們使用 2 并且告訴文件對(duì)象從文件尾移動(dòng)到 128 字節(jié)的位置。
(3)  tell 方法確認(rèn)了當(dāng)前位置已經(jīng)移動(dòng)了。
(4)  read 方法從被打開(kāi)文件中讀取指定個(gè)數(shù)的字節(jié),并且返回含有讀取數(shù)據(jù)的字符串??蛇x參數(shù)指定了讀取的最大字節(jié)數(shù)。如果沒(méi)有指定參數(shù),read 將讀到文件末尾。(我們本可以在這里簡(jiǎn)單地說(shuō) read() ,因?yàn)槲覀兇_切地知道在文件的何處,事實(shí)上,我們讀的是最后 128 個(gè)字節(jié)。) 讀出的數(shù)據(jù)賦給變量 tagData,并且當(dāng)前的位置根據(jù)所讀的字節(jié)數(shù)作了修改。
(5)  tell 方法確認(rèn)了當(dāng)前位置已經(jīng)移動(dòng)了。如果做一下算術(shù),你會(huì)看到在讀了 128 個(gè)字節(jié)之后,位置數(shù)已經(jīng)增加了 128。

2. 關(guān)閉文件

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

>>> 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)  文件對(duì)象的 closed 屬性表示對(duì)象是打開(kāi)還是關(guān)閉了文件。在本例中,文件仍然打開(kāi)著 (closed 是 False)。

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

(3)  closed 屬性證實(shí)了文件被關(guān)閉了。

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

(5)  對(duì)一個(gè)文件已經(jīng)關(guān)閉的文件對(duì)象調(diào)用 close 不會(huì) 引發(fā)異常,它靜靜地失敗。

3. 處理  I/O 錯(cuò)誤

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

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)  因?yàn)榇蜷_(kāi)和讀取文件有風(fēng)險(xiǎn),并且可能引發(fā)異常,所有這些代碼都用一個(gè) try...except 塊封裝。(嘿,標(biāo)準(zhǔn)化的縮近不好嗎?這就是你開(kāi)始欣賞它的地方。)
(2)  open 函數(shù)可能引發(fā) IOError 異常。(可能是文件不存在。)
(3)  seek 方法可能引發(fā) IOError 異常。(可能是文件長(zhǎng)度小于 128 字節(jié)。)
(4)  read 方法可能引發(fā) IOError 異常。(可能磁盤有壞扇區(qū),或它在一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器上,而網(wǎng)絡(luò)剛好斷了。)
(5)  這是新的:一個(gè) try...finally 塊。一旦文件通過(guò) open 函數(shù)被成功地打開(kāi),我們應(yīng)該絕對(duì)保證把它關(guān)閉,即使是在 seek 或 read 方法引發(fā)了一個(gè)異常時(shí)。try...finally 塊可以用來(lái):在 finally 塊中的代碼將
總是 被執(zhí)行,甚至某些東西在 try 塊中引發(fā)一個(gè)異常也會(huì)執(zhí)行。可以這樣考慮,不管在路上發(fā)生什么,代碼都會(huì)被 “即將滅亡” 地執(zhí)行。
(6)  最后,處理我們的 IOError 異常。它可能是由調(diào)用 open、seek 或 read 引發(fā)的 IOError 異常。這里,我們其實(shí)不用關(guān)心,因?yàn)閷⒁龅氖戮褪庆o靜地忽略它然后繼續(xù)。(記住,pass 是一條不做任何事的 Python 語(yǔ)句。) 這樣完全合法,“處理” 一個(gè)異常可以明確表示不做任何事。它仍然被認(rèn)為處理過(guò)了,并且處理將正常繼續(xù),從 try...except 塊的下一行代碼開(kāi)始。

4. 寫入文件

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

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

如果文件還不存在,任意一種模式都將自動(dòng)創(chuàng)建文件,因此從來(lái)不需要任何復(fù)雜的邏輯:“如果 log 文件還不存在,將創(chuàng)建一個(gè)新的空文件,正因?yàn)槿绱?,你可以第一次就打開(kāi)它”。打開(kāi)文件并開(kāi)始寫就可以了。

>>> 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)  你可以大膽地開(kāi)始創(chuàng)建新文件 test.log 或覆蓋現(xiàn)有文件,并為寫入目的而打開(kāi)它。(第二個(gè)參數(shù) "w" 的意思是為文件寫入而打開(kāi)。) 是的,它和想象中的一樣危險(xiǎn)。我希望你不要關(guān)心文件以前的內(nèi)容,因?yàn)樗F(xiàn)在已經(jīng)不存在了。

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

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

(4)  碰巧你知道 test.log 存在 (因?yàn)槟銊傁蛩鼘懲炅藬?shù)據(jù)),所以你可以打開(kāi)它并向其追加數(shù)據(jù)。("a" 參數(shù)的意思是為追加目的打開(kāi)文件。) 實(shí)際上即使文件不存在你也可以這樣做,因?yàn)橐宰芳臃绞酱蜷_(kāi)一文件時(shí),如果需要的話會(huì)創(chuàng)建文件。但是追加操作從不 損壞文件的現(xiàn)有內(nèi)容。

(5)  正如你所看到的,原來(lái)的行和你以追加方式寫入的第二行現(xiàn)在都在 test.log 中了。同時(shí)注意兩行之間并沒(méi)包含回車符。因?yàn)閮纱螌懭胛募r(shí)都沒(méi)有明確地寫入回車符,所以文件中沒(méi)有包含回車符。你可以用 "\n" 寫入回車符。因?yàn)槟銢](méi)做這項(xiàng)工作,所以你寫到文件的所有內(nèi)容都將顯示在同一行上。

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

相關(guān)文章

  • Python OpenCV實(shí)戰(zhàn)之與機(jī)器學(xué)習(xí)的碰撞

    Python OpenCV實(shí)戰(zhàn)之與機(jī)器學(xué)習(xí)的碰撞

    機(jī)器學(xué)習(xí)是人工智能的子集,為計(jì)算機(jī)以及其它具有計(jì)算能力的系統(tǒng)提供自動(dòng)預(yù)測(cè)或決策的能力。本文主要介紹了OpenCV 提供的常見(jiàn)機(jī)器學(xué)習(xí)算法和技術(shù),用于解決計(jì)算機(jī)視覺(jué)項(xiàng)目中的實(shí)際問(wèn)題,需要的朋友可以參考一下
    2021-12-12
  • 基于Python制作ASCII碼轉(zhuǎn)換器

    基于Python制作ASCII碼轉(zhuǎn)換器

    ASCII碼是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言。本文將利用Python制作一個(gè)ASCII碼轉(zhuǎn)換器,感興趣的可以動(dòng)手試一試
    2022-02-02
  • JSONLINT:python的json數(shù)據(jù)驗(yàn)證庫(kù)實(shí)例解析

    JSONLINT:python的json數(shù)據(jù)驗(yàn)證庫(kù)實(shí)例解析

    本文介紹的 jsonlint 啟發(fā)自 python 的表單驗(yàn)證工具 wtforms,wtforms 通過(guò)繼承 Form 類也能進(jìn)行 json 數(shù)據(jù)驗(yàn)證,下面通過(guò)一些例子給大家詳細(xì)介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-11-11
  • 詳解Anaconda安裝tensorflow報(bào)錯(cuò)問(wèn)題解決方法

    詳解Anaconda安裝tensorflow報(bào)錯(cuò)問(wèn)題解決方法

    這篇文章主要介紹了Anaconda安裝tensorflow報(bào)錯(cuò)問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • pytorch程序異常后刪除占用的顯存操作

    pytorch程序異常后刪除占用的顯存操作

    今天小編就為大家分享一篇pytorch程序異常后刪除占用的顯存操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python使用smtp和pop簡(jiǎn)單收發(fā)郵件完整實(shí)例

    Python使用smtp和pop簡(jiǎn)單收發(fā)郵件完整實(shí)例

    這篇文章主要介紹了Python使用smtp和pop簡(jiǎn)單收發(fā)郵件完整實(shí)例,簡(jiǎn)單介紹了smtp和pop,然后分享了相關(guān)實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python處理excel文件之xlsxwriter?模塊

    python處理excel文件之xlsxwriter?模塊

    這篇文章主要介紹了python處理excel文件之xlsxwriter?模塊,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-05-05
  • python抓取網(wǎng)頁(yè)中鏈接的靜態(tài)圖片

    python抓取網(wǎng)頁(yè)中鏈接的靜態(tài)圖片

    這篇文章主要為大家詳細(xì)介紹了python抓取網(wǎng)頁(yè)中鏈接的靜態(tài)圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python檢測(cè)IP地址變化并觸發(fā)事件

    python檢測(cè)IP地址變化并觸發(fā)事件

    這篇文章主要為大家詳細(xì)介紹了python檢測(cè)IP地址變化并觸發(fā)事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 淺談pycharm下找不到sqlalchemy的問(wèn)題

    淺談pycharm下找不到sqlalchemy的問(wèn)題

    今天小編就為大家分享一篇淺談pycharm下找不到sqlalchemy的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12

最新評(píng)論