久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時隨地免費學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > Python文件操作步驟示例

        Python文件操作步驟示例

        來源:千鋒教育
        發(fā)布人:xqq
        時間: 2023-11-07 11:17:09 1699327029

        我們來讀取這樣一個文本文件:song.txt,該文件的字符編碼為utf-8。

        匆匆那年我們究竟說了幾遍再見之后再拖延

        可惜誰有沒有愛過不是一場七情上面的雄辯

        匆匆那年我們一時匆忙撂下難以承受的諾言

        只有等別人兌現(xiàn)

        1.菜鳥實現(xiàn)(只是實現(xiàn)功能):

        python3實現(xiàn):

        #第一步:(以只讀模式)打開文件

        f=open('song.txt','r',encoding='utf-8')

        #第二步:讀取文件內(nèi)容

        print(f.read())

        #第三步:關(guān)閉文件

        f.close()

        這里說下Python2的實現(xiàn)

        #第一步:(以只讀模式)打開文件

        f=open('song.txt','r')

        #第二步:讀取文件內(nèi)容

        print(f.read().decode('utf-8'))

        #第三步:關(guān)閉文件

        f.close()

        說明:

        Python3中已經(jīng)內(nèi)置對Unicode的支持,字符串str已經(jīng)是真正的Unicode字符串。也就是說Python3中的文件讀取方法已經(jīng)自動完成了解碼處理,因此無需再手動進(jìn)行解碼,可以直接將讀取的文件中的內(nèi)容進(jìn)行打印;Python2中的字符串str是字節(jié)串,讀取文件得到的也是字節(jié)串,在打印之前應(yīng)該手動將其解碼成Unicode字符串。關(guān)于這部分的說明,可以參考之前這篇文章<<再談Python中的字符串與字符編碼>>。

        2.中級實現(xiàn)

        在實現(xiàn)基本功能的前提下,考慮一些可能的意外因素。因為文件讀寫時都有可能產(chǎn)生IO錯誤(IOError),一旦出錯,后面包括f.close()在內(nèi)的所有代碼都不會執(zhí)行了。因此我們要保證文件無論如何都能被關(guān)閉。那么可以用try...finally來實現(xiàn),這實際上就是try...except..finally的簡化版(我們只用Python3來進(jìn)行示例演示):

        f=''

        try:

        f=open('song.txt','r',encoding='utf-8')

        print(f.read())

        num=10/0

        finally:

        print('>>>>>>finally')

        iff:

        f.close()

        輸出結(jié)果:

        匆匆那年我們究竟說了幾遍再見之后再拖延

        可惜誰有沒有愛過不是一場七情上面的雄辯

        匆匆那年我們一時匆忙撂下難以承受的諾言

        只有等別人兌現(xiàn)

        >>>>>>finally

        Traceback(mostrecentcalllast):

        File"",line4,in

        ZeroDivisionError:divisionbyzero

        輸出結(jié)果說明,盡管with代碼塊中出現(xiàn)了異常,但是”>>>>>>finally“信息還是被打印了,說明finally代碼塊被執(zhí)行,即文件關(guān)閉操作被執(zhí)行。但是結(jié)果中錯誤信息還是被輸出了,因此還是建議用一個完成的try...except...finally語句對異常信息進(jìn)行捕獲和處理。

        3.最佳實踐

        為了避免忘記或者為了避免每次都要手動關(guān)閉文件,我們可以使用with語句(一種語法糖,語法糖語句通常是為了簡化某些操作而設(shè)計的)。with語句會在其代碼塊執(zhí)行完畢之后自動關(guān)閉文件。因此我們可以這樣來改寫上面的程序:

        withopen('song.txt','r',encoding='utf-8')asf:

        print(f.read())

        print(f.closed)

        輸出結(jié)果:

        匆匆那年我們究竟說了幾遍再見之后再拖延

        可惜誰有沒有愛過不是一場七情上面的雄辯

        匆匆那年我們一時匆忙撂下難以承受的諾言

        只有等別人兌現(xiàn)

        True

        是不是變得簡介多了,代碼結(jié)構(gòu)也比較清晰了。with之后打印的f.closed屬性值為True,說明文件確實被關(guān)閉了。

        思考:

        with語句會幫我們自動處理異常信息嗎?

        要回答這個問題就要提到“上下文管理器”和with語句的工作流程。

        with語句不僅僅可以用于文件操作,它實際上是一個很通用的結(jié)構(gòu),允許使用所謂的上下文管理器(contextmanager)。上下文管理器是一種支持__enter__()和__exit__()這兩個方法的對象。__enter__()方法不帶任何參數(shù),它在進(jìn)入with語句塊的時候被調(diào)用,該方法的返回值會被賦值給as關(guān)鍵字之后的變量。__exit__()方法帶有3個參數(shù):type(異常類型),value(異常信息),trace(異常棧),當(dāng)with語句的代碼塊執(zhí)行完畢或執(zhí)行過程中因為異常而被終止都會調(diào)用__exit__()方法。正常退出時該方法的3個參數(shù)都為None,異常退出時該方法的3個參數(shù)會被分別賦值。如果__exit__()方法返回值(真值測試結(jié)果)為True則表示異常已經(jīng)被處理,命令執(zhí)行結(jié)果中就不會拋出異常信息了;反之,如果__exit__()方法返回值(真值測試結(jié)果)為False,則表示異常沒有被處理并且會向外拋出該異常。

        現(xiàn)在我們應(yīng)該明白了,異常信息會不會被處理是由with后的語句返回對象的__exit__()方法決定的。文件可以被用作上下文管理器。它的__enter__方法返回文件對象本身,__exit__方法會關(guān)閉文件并返回None。我們看下file類中關(guān)于這兩個方法的實現(xiàn):

        def__enter__(self):#realsignatureunknown;restoredfrom__doc__

        """__enter__()->self."""

        returnself

        def__exit__(self,*excinfo):#realsignatureunknown;restoredfrom__doc__

        """__exit__(*excinfo)->None.Closesthefile."""

        pass

        可見,file類的__exit__()方法的返回值為None,None的真值測試結(jié)果為False,因此用于文件讀寫的with語句代碼塊中的異常信息還是會被拋出來,需要我們自己去捕獲并處理。

        withopen('song.txt','r',encoding='utf-8')asf:

        print(f.read())

        num=10/0

        輸出結(jié)果:

        匆匆那年我們究竟說了幾遍再見之后再拖延

        可惜誰有沒有愛過不是一場七情上面的雄辯

        匆匆那年我們一時匆忙撂下難以承受的諾言

        只有等別人兌現(xiàn)

        Traceback(mostrecentcalllast):

        File"",line3,in

        ZeroDivisionError:divisionbyzero

        注意:上面所說的__exit__()方法返回值(真值測試結(jié)果)為True則表示異常已經(jīng)被處理,指的是with代碼塊中出現(xiàn)的異常。它對于with關(guān)鍵字之后的代碼中出現(xiàn)的異常是不起作用的,因為還沒有進(jìn)入上下文管理器就已經(jīng)發(fā)生異常了。因此,無論如何,還是建議在必要的時候在with語句外面套上一層try...except來捕獲和處理異常。

        有關(guān)“上下文管理器”這個強(qiáng)大且高級的特性的更多信息,請參看Python參考手冊中的上下文管理器部分?;蛘呖梢栽赑ython庫參考中查看上下文管理器和contextlib部分。

        以上內(nèi)容為大家介紹了Python文件操作步驟示例,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
        免費領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        景德镇市| 师宗县| 鸡东县| 易门县| 博罗县| 保山市| 许昌县| 新乡县| 沙坪坝区| 盘锦市| 潼关县| 扬中市| 南宫市| 沂水县| 股票| 准格尔旗| 封开县| 黄石市| 来安县| 上饶市| 太康县| 三亚市| 德令哈市| 天峻县| 庄河市| 普兰县| 开原市| 宣恩县| 绥芬河市| 皋兰县| 大余县| 栾城县| 屏山县| 华亭县| 响水县| 汤阴县| 逊克县| 塔河县| 揭西县| 高雄市| 灵川县|