<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文帶你搞懂Python文件讀寫(xiě)

          共 3912字,需瀏覽 8分鐘

           ·

          2021-09-04 20:53

          點(diǎn)擊上方“Go語(yǔ)言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語(yǔ)言”即可獲贈(zèng)從入門(mén)到進(jìn)階共10本電子書(shū)

          潯陽(yáng)江頭夜送客,楓葉荻花秋瑟瑟。

          大家好,我是Go進(jìn)階者。今天給大家分享Python基礎(chǔ)之文件讀寫(xiě)。

          一、什么是文件?

          文件就是把一些存儲(chǔ)存放起來(lái),可以讓程序下一次執(zhí)行的時(shí)候直接使用,而不必重新制作一份,省時(shí)省力。


          二、文件如何的打開(kāi)?

          Python內(nèi)置了一個(gè)open()方法,可以對(duì)文件進(jìn)行讀寫(xiě)操作。

          使用open()方法操作文件就像把大象塞進(jìn)冰箱一樣,可以分三步走,一是打開(kāi)文件,二是操作文件,三是關(guān)閉文件。

          open語(yǔ)法

          open()方法的返回值是一個(gè)file對(duì)象,可以將它賦值給一個(gè)變量(文件句柄)。

          其基本語(yǔ)法格式為:

          f = open(filename, mode)

          注:

          Python中,所有具有read和write方法的對(duì)象,都可以歸類(lèi)為file類(lèi)型。而所有的file類(lèi)型對(duì)象都可以使用open方法打開(kāi),close方法結(jié)束。

          filename:一個(gè)包含了你要訪問(wèn)的文件名稱(chēng)的字符串值,通常是一個(gè)文件路徑。

          mode:打開(kāi)文件的模式,有很多種,默認(rèn)是只讀方式r。

          例:

          # 打開(kāi)一個(gè)文件f = open("1.txt", "w")f.write("Python 是一種非常好的語(yǔ)言。\nPython!!\n")# 關(guān)閉打開(kāi)的文件f.close()

          運(yùn)行結(jié)果:

          在1.txt文件中寫(xiě)入Python 是一種非常好的語(yǔ)言。Python。

          三、訪問(wèn)模式

          通過(guò)一個(gè)表格,了解Python常用的讀寫(xiě)模式

          訪問(wèn)模式說(shuō)明
          r以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。(默認(rèn)模式)。
          w打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
          a打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。
          rb以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
          wb以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
          ab以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。
          r+打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。
          w+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
          a+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。
          rb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。
          wb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
          ab+以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。

          如果要讀取非UTF-8編碼的文件,需要給open()函數(shù)傳入encoding參數(shù)。

          例如,讀取GBK編碼的文件:

          >>> f = open('gbk.txt', 'r', encoding='gbk')>>> f.read()'GBK' #編碼

          遇到有些編碼不規(guī)范的文件,可能會(huì)拋出UnicodeDecodeError異常,這表示在文件中可能夾雜了一些非法編碼的字符。遇到這種情況,可以提供errors參數(shù),表示如果遇到編碼錯(cuò)誤后如何處理。

          f = open('gbk.txt', 'r', encoding='gbk', errors='ignore')


          四、 文件對(duì)象操作

          用open方法打開(kāi)一個(gè)文件,將返回一個(gè)文件對(duì)象。這個(gè)對(duì)象內(nèi)置了很多操作方法。

          下面打開(kāi)了一個(gè)f文件對(duì)象(1.txt)。對(duì)文件對(duì)象進(jìn)行相關(guān)的操作。

          1. f.read(size)

          讀取一定大小的數(shù)據(jù), 然后作為字符串或字節(jié)對(duì)象返回。size是一個(gè)可選的數(shù)字類(lèi)型的參數(shù),用于指定讀取的數(shù)據(jù)量。當(dāng)size被忽略了或者為負(fù)值,那么該文件的所有內(nèi)容都將被讀取并且返回。

          f = open("1.txt", "r")
          str = f.read()print(str)
          f.close()

          如果文件體積較大,請(qǐng)不要使用read()方法一次性讀入內(nèi)存,而是read(312)這種一點(diǎn)一點(diǎn)的讀。

          2. f.readline()

          從文件中讀取一行n內(nèi)容。換行符為'\n'。如果返回一個(gè)空字符串,說(shuō)明已經(jīng)已經(jīng)讀取到最后一行。這種方法,通常是讀一行,處理一行的情況下使用。

          f = open("1.txt", "r")str = f.readline()print(str)f.close()

          3. f.readlines()

          將文件中所有的行,一行一行全部讀入一個(gè)列表內(nèi),按順序一個(gè)一個(gè)作為列表的元素,并返回這個(gè)列表。readlines方法會(huì)一次性將文件全部讀入內(nèi)存,所以也存在一定的弊端。但是它有個(gè)好處,每行都保存在列表里,可隨意存取。

          f = open("1.txt", "r")a = f.readlines()print(a)f.close()

          4. 遍歷文件

          實(shí)際情況中,我們會(huì)將文件對(duì)象作為一個(gè)迭代器來(lái)使用。

          # 打開(kāi)一個(gè)文件f = open("1.txt", "r")
          for line in f: print(line, end='')
          # 關(guān)閉打開(kāi)的文件f.close()

          這個(gè)方法很簡(jiǎn)單, 不需要將文件一次性讀出,但是同樣沒(méi)有提供一個(gè)很好的控制,與readline方法一樣只能前進(jìn),不能回退。

          幾種不同的讀取和遍歷文件的方法比較:

          如果文件很小,read()一次性讀取最方便;

          如果不能確定文件大小,反復(fù)調(diào)用read(size)比較保險(xiǎn);

          如果是配置文件,調(diào)用readlines()最方便。普通情況,使用for循環(huán)更好,速度更快。

          5. f.write()

          使用write()可以完成向文件寫(xiě)入數(shù)據(jù)。

          # 打開(kāi)一個(gè)文件f = open("/tmp/foo.txt", "w")
          f.write("Python 是一種非常好的語(yǔ)言。\n我喜歡Python!!\n")
          # 關(guān)閉打開(kāi)的文件f.close()

          6. f.tell()

          返回文件讀寫(xiě)指針當(dāng)前所處的位置,它是從文件開(kāi)頭開(kāi)始算起的字節(jié)數(shù)。一定要注意了,是字節(jié)數(shù),不是字符數(shù)。

          7. f.seek()

          如果要改變位置指針的位置, 可以使用f.seek(offset, from_what)方法。seek()經(jīng)常和tell()方法配合使用。

          from_what的值,如果是0表示從文件開(kāi)頭計(jì)算,如果是1表示從文件讀寫(xiě)指針的當(dāng)前位置開(kāi)始計(jì)算,2表示從文件的結(jié)尾開(kāi)始計(jì)算,默認(rèn)為0,例如:

          offset:表示偏移量。

          • seek(x,0) :從起始位置即文件首行首字符開(kāi)始移動(dòng) x 個(gè)字符。

          • seek(x,1) :表示從當(dāng)前位置往后移動(dòng)x個(gè)字符。

          • seek(-x,2):表示從文件的結(jié)尾往前移動(dòng)x個(gè)字符。

          例:

          f = open("1.txt", "rb+")f.write(b"1232312adsfalafds")
          print(f.tell())

          print(f.seek(5))
          print(f.read(1))
          print(f.seek(-3, 2))
          print(f.read(1))

          運(yùn)行結(jié)果:


          8. f.close()

          關(guān)閉文件對(duì)象。當(dāng)處理完一個(gè)文件后,調(diào)用f.close()來(lái)關(guān)閉文件并釋放系統(tǒng)的資源。文件關(guān)閉后,如果嘗試再次調(diào)用該文件對(duì)象,則會(huì)拋出異常。忘記調(diào)用close()的后果是數(shù)據(jù)可能只寫(xiě)了一部分到磁盤(pán),剩下的丟失了,或者更糟糕的結(jié)果。


          五、 with關(guān)鍵字

          with關(guān)鍵字用于Python的上下文管理器機(jī)制。為了防止open這一類(lèi)文件打開(kāi)方法,在操作過(guò)程出現(xiàn)異常或錯(cuò)誤,或者最后忘了執(zhí)行close方法,文件非正常關(guān)閉等可能導(dǎo)致文件泄露、破壞的問(wèn)題。

          Python提供了with這個(gè)上下文管理器機(jī)制,保證文件會(huì)被正常關(guān)閉。不需要再寫(xiě)close語(yǔ)句。注意縮進(jìn)。

          with open('test.txt', 'w') as f:    f.write('Hello, world!')

          with支持同時(shí)打開(kāi)多個(gè)文件(文件都是隨機(jī)創(chuàng)建的):

          with open('1') as obj1, open('2','w') as obj2:    s=obj1.read()    obj2.write(s)


          六、總結(jié)

          本文基于Python基礎(chǔ),使用Python語(yǔ)言。介紹了有關(guān)Python文件操作的知識(shí)點(diǎn),從文件的基本概念入手 ,通過(guò)一個(gè)個(gè)小項(xiàng)目的演示,對(duì)常用的讀寫(xiě)模式,文件對(duì)象操作方法,以及在實(shí)際應(yīng)用中需要注意的問(wèn)題,都做了詳細(xì)的講解。希望幫助你更好的學(xué)習(xí)Python。


          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Go學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩午夜 | 91影院理论推荐手机在线观看 | 国产三级日本三级 | 午夜操逼网 | 欧美setu |