欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python read函數(shù)按字節(jié)(字符)讀取文件的實(shí)現(xiàn)

 更新時(shí)間:2019年07月03日 11:25:02   作者:biancheng  
這篇文章主要介紹了Python read函數(shù)按字節(jié)(字符)讀取文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

文件對(duì)象提供了 read() 方法來(lái)按字節(jié)或字符讀取文件內(nèi)容,到底是讀取宇節(jié)還是字符,則取決于是否使用了 b 模式,如果使用了 b 模式,則每次讀取一個(gè)字節(jié);如果沒(méi)有使用 b 模式,則每次讀取一個(gè)字符。在調(diào)用該方法時(shí)可傳入一個(gè)整數(shù)作為參數(shù),用于指定最多讀取多少個(gè)字節(jié)或宇符。

例如,如下程序采用循環(huán)讀取整個(gè)文件的內(nèi)容:

f = open("read_test.py", 'r', True)
while True:
  # 每次讀取一個(gè)字符
  ch = f.read(1)
  # 如果沒(méi)有讀到數(shù)據(jù),跳出循環(huán)
  if not ch: break
  # 輸出ch
  print(ch, end='')
f.close()

上面程序采用循環(huán)依次讀取每一個(gè)字符(因?yàn)槌绦驔](méi)有使用 b 模式),每讀取到一個(gè)字符,程序就輸出該字符。

正如從上面程序所看到的,當(dāng)程序讀寫(xiě)完文件之后,推薦立即調(diào)用 close() 方法來(lái)關(guān)閉文件,這樣可以避免資源泄露。如果需要更安全地關(guān)閉文件,推薦將關(guān)閉文件的 close() 方法調(diào)用在 finally 塊中執(zhí)行。例如,將上面程序改為如下形式:

f =open ("test.txt",'r',True)
try:
  while true:
    #每次讀取一個(gè)字符
    ch = f.read(1)
    #如果沒(méi)有讀取到數(shù)據(jù),則跳出循環(huán)
    if not ch:break
    #輸出ch
    print(ch, end='')
  finally:
    f.close() 

本章為了突出主題,簡(jiǎn)化程序,都將直接調(diào)用 close() 方法關(guān)閉文件,避免使用 finally 塊。

如果在調(diào)用 read() 方法時(shí)不傳入?yún)?shù),該方法默認(rèn)會(huì)讀取全部文件內(nèi)容。例如如下程序:

f = open("test.txt", 'r', True)
# 直接讀取全部文件
print(f.read())
f.close()

通過(guò)上面兩個(gè)程序,讀者可能已經(jīng)發(fā)現(xiàn)了一個(gè)問(wèn)題,當(dāng)使用 open() 函數(shù)打開(kāi)文本文件時(shí),程序使用的是哪種字符集呢?總是使用當(dāng)前操作系統(tǒng)的字符集,比如 Windows 平臺(tái),open() 函數(shù)總是使用 GBK 字符集。因此,上面程序讀取的 test.txt 也必須使用 GBK 字符集保存;否則,程序就會(huì)出現(xiàn) UnicodeDecodeError 錯(cuò)誤。

如果要讀取的文件所使用的字符集和當(dāng)前操作系統(tǒng)的字符集不匹配,則有兩種解決方式:

  1. 使用二進(jìn)制模式讀取,然后用 bytes 的 decode() 方法恢復(fù)成字符串。
  2. 利用 codecs 模塊的 open() 函數(shù)來(lái)打開(kāi)文件,該函數(shù)在打開(kāi)文件時(shí)允許指定字符集。

下面程序使用二進(jìn)制模式來(lái)讀取文本文件:

# 指定使用二進(jìn)制方式讀取文件內(nèi)容
f = open("read_test3.py", 'rb', True)
# 直接讀取全部文件,并調(diào)用bytes的decode將字節(jié)內(nèi)容恢復(fù)成字符串
print(f.read().decode('utf-8'))
f.close()

上面程序在調(diào)用 open() 函數(shù)時(shí),傳入了 rb 模式,這表明采用二進(jìn)制模式讀取文件,此時(shí)文件對(duì)象的 read() 方法返回的是 bytes 對(duì)象,程序可調(diào)用 bytes 對(duì)象的 decode() 方法將它恢復(fù)成字符串。由于此時(shí)讀取的 read_test3.py 文件是以 UTF-8 的格式保存的,因此程序需要使用 decode() 方法恢復(fù)字符串時(shí)顯式指定使用 UTF-8 字符集。

下面程序使用 codes 模塊的 open() 函數(shù)來(lái)打開(kāi)文件,此時(shí)可以顯式指定字符集:

import codecs
#指定使用utf-8 字符集讀取文件內(nèi)容
f = codecs.open("read_test4.py", 'r', 'utf-8', buffering=True)
while True:
  #每次讀取一個(gè)字符
  ch = f.read(1)
  #如果沒(méi)有讀取到數(shù)據(jù),則跳出循環(huán)
  if not ch : break
  #輸出ch
  print (ch, end='')
f.close()

上面程序在調(diào)用 open() 函數(shù)時(shí)顯式指定使用 UTF-8 字符集,這樣程序在讀取文件內(nèi)容時(shí)就完全沒(méi)有問(wèn)題了。

相關(guān)文章

  • python進(jìn)度條tqdm使用方式

    python進(jìn)度條tqdm使用方式

    這篇文章主要介紹了python進(jìn)度條tqdm使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python可視化plotly?圖例(legend)設(shè)置

    python可視化plotly?圖例(legend)設(shè)置

    這篇文章主要介紹了python可視化plotly?圖例(legend)設(shè)置,主要介紹了關(guān)于python?的legend圖例,參數(shù)使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,需要的朋友可以參考下賣你具體內(nèi)容
    2022-02-02
  • pytorch1.60 torch.nn在pycharm中無(wú)法自動(dòng)智能提示的解決

    pytorch1.60 torch.nn在pycharm中無(wú)法自動(dòng)智能提示的解決

    這篇文章主要介紹了pytorch1.60 torch.nn在pycharm中無(wú)法自動(dòng)智能提示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python統(tǒng)計(jì)中文字符數(shù)量的兩種方法

    python統(tǒng)計(jì)中文字符數(shù)量的兩種方法

    今天小編就為大家分享一篇python統(tǒng)計(jì)中文字符數(shù)量的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Django1.11配合uni-app發(fā)起微信支付的實(shí)現(xiàn)

    Django1.11配合uni-app發(fā)起微信支付的實(shí)現(xiàn)

    這篇文章主要介紹了Django1.11配合uni-app發(fā)起微信支付的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python?操作pdf?pdfplumber讀取PDF寫(xiě)入Excel

    Python?操作pdf?pdfplumber讀取PDF寫(xiě)入Excel

    這篇文章主要介紹了Python?操作pdf?pdfplumber讀取PDF寫(xiě)入Excel,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以考察一下
    2022-08-08
  • python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法

    python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法

    這篇文章主要介紹了python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 一文帶你安裝opencv與常用庫(kù)(保姆級(jí)教程)

    一文帶你安裝opencv與常用庫(kù)(保姆級(jí)教程)

    Python OpenCV是一種流行的計(jì)算機(jī)視覺(jué)庫(kù),使用它可以進(jìn)行圖像處理、視頻處理等操作,下面這篇文章主要給大家介紹了關(guān)于安裝opencv與常用庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Python mutiprocessing多線程池pool操作示例

    Python mutiprocessing多線程池pool操作示例

    這篇文章主要介紹了Python mutiprocessing多線程池pool操作,結(jié)合實(shí)例形式分析了Python多線程模塊multiprocessing進(jìn)程池相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python實(shí)現(xiàn)求解一元二次方程的方法示例

    Python實(shí)現(xiàn)求解一元二次方程的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)求解一元二次方程的方法,涉及Python基于math包進(jìn)行數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06

最新評(píng)論