• <del id="a8uas"></del>
    • 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      400-811-9990
      手機(jī)站
      千鋒教育

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

      千鋒教育

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

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

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

      上海
      • 北京
      • 鄭州
      • 武漢
      • 成都
      • 西安
      • 沈陽(yáng)
      • 廣州
      • 南京
      • 深圳
      • 大連
      • 青島
      • 杭州
      • 重慶
      當(dāng)前位置:合肥千鋒IT培訓(xùn)  >  技術(shù)干貨  >  Python文件讀取相關(guān)方法

      Python文件讀取相關(guān)方法

      來(lái)源:千鋒教育
      發(fā)布人:xqq
      時(shí)間: 2023-11-09 14:45:51

      我們知道,對(duì)文件的讀取操作需要將文件中的數(shù)據(jù)加載到內(nèi)存中,而上面所用到的read()方法會(huì)一次性把文件中所有的內(nèi)容全部加載到內(nèi)存中。這明顯是不合理的,當(dāng)遇到一個(gè)幾個(gè)G的的文件時(shí),必然會(huì)耗光機(jī)器的內(nèi)存。這里我們來(lái)介紹下Python中讀取文件的相關(guān)方法:

      方法描述

      read()一次讀取文件所有內(nèi)容,返回一個(gè)str

      read(size)每次最多讀取指定長(zhǎng)度的內(nèi)容,返回一個(gè)str;在Python2中size指定的是字節(jié)長(zhǎng)度,在Python3中size指定的是字符長(zhǎng)度

      readlines()一次讀取文件所有內(nèi)容,按行返回一個(gè)list

      readline()每次只讀取一行內(nèi)容

      此外,還要兩個(gè)與文件指針位置相關(guān)的方法

      方法描述

      seek(n)將文件指針移動(dòng)到指定字節(jié)的位置

      tell()獲取當(dāng)前文件指針?biāo)谧止?jié)位置

      下面來(lái)看下操作實(shí)例

      1.讀取指定長(zhǎng)度的內(nèi)容

      Python2

      withopen('song.txt','r')asf:

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

      輸出結(jié)果:

      匆匆那年

      結(jié)果說明:Python2中read(size)方法的size參數(shù)指定的要讀取的字節(jié)數(shù),而song.txt文件是UTF-8編碼的內(nèi)容,一個(gè)漢字占3個(gè)字節(jié),因此12個(gè)字節(jié)剛好是4個(gè)漢字。

      Python3

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

      print(f.read(12))

      輸出結(jié)果:

      匆匆那年我們究竟說

      結(jié)果說明:Python3中read(size)方法的size參數(shù)指定的要讀取的字符數(shù),這與文件的字符編碼無(wú)關(guān),就是返回12個(gè)字符。

      2.讀取文件中的一行內(nèi)容

      Python2

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

      print(f.readline())

      Python3

      withopen('song.txt','r')asf:

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

      輸出結(jié)果都一樣:

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

      3.遍歷打印一個(gè)文件中的每一行

      這里我們只以Python3來(lái)進(jìn)行實(shí)例操作,Python2僅僅是需要在讀取到內(nèi)容后進(jìn)行手動(dòng)解碼而已,上面已經(jīng)有示例。

      方式一:先一次性讀取所有行到內(nèi)存,然后再遍歷打印

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

      forlineinf.readlines():

      print(line)

      輸出結(jié)果:

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

      可惜誰(shuí)有沒有愛過不是一場(chǎng)七情上面的雄辯

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

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

      這種方式的缺點(diǎn)與read()方法是一樣的,都是會(huì)消耗大量的內(nèi)存空間。

      方式二:通過迭代器一行一行的讀取并打印

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

      forlineinf:

      print(line)

      輸出結(jié)果:

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

      可惜誰(shuí)有沒有愛過不是一場(chǎng)七情上面的雄辯

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

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

      另外,發(fā)現(xiàn)上面的輸出結(jié)果中行與行之間多了一個(gè)空行。這是因?yàn)槲募恳恍械哪J(rèn)都有換行符,而print()方法也會(huì)輸出換行,因此就多了一個(gè)空行。去掉空行也比較簡(jiǎn)單:可以用line.rstrip()去除字符串右邊的換行符,也可以通過print(line,end='')避免print方法造成的換行。

      file類的其他方法:

      方法描述

      flush()刷新緩沖區(qū)數(shù)據(jù),將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件

      next()返回文件下一行,這個(gè)方法也是file對(duì)象實(shí)例可以被當(dāng)做迭代器使用的原因

      truncate([size])截取文件中指定字節(jié)數(shù)的內(nèi)容,并覆蓋保存到文件中,如果不指定size參數(shù)則文件將被清空;Python2無(wú)返回值,Python3返回新文件的內(nèi)容字節(jié)數(shù)

      write(str)將字符串寫入文件,沒有返回值

      writelines(sequence)向文件寫入一個(gè)字符串或一個(gè)字符串列表,如果字符串列表中的元素需要換行要自己加入換行符

      fileno()返回一個(gè)整型的文件描述符,可以用于一些底層IO操作上(如,os模塊的read方法)

      isatty()判斷文件是否被連接到一個(gè)虛擬終端,是則返回True,否則返回False

      以上內(nèi)容為大家介紹了Python文件讀取相關(guān)方法,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

      猜你喜歡LIKE

      python依賴安裝失敗怎么辦

      2023-11-09

      python如何檢測(cè)字符串是不是全為字母?

      2023-11-09

      python如何獲取程序執(zhí)行時(shí)間?

      2023-11-09

      最新文章NEW

      python找不到指定模塊怎么辦

      2023-11-09

      python如何去空格和回車?

      2023-11-09

      python使用matplotlib繪圖怎么在線上標(biāo)注?

      2023-11-09

      相關(guān)推薦HOT

      更多>>

      快速通道 更多>>

      最新開班信息 更多>>

      網(wǎng)友熱搜 更多>>