1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      如何使用Python讀取大文件-創(chuàng)新互聯(lián)

      這篇文章將為大家詳細講解有關(guān)如何使用Python讀取大文件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

      成都創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)按需制作,是成都網(wǎng)站建設(shè)公司,為成都混凝土攪拌罐提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站設(shè)計熱線:18982081108

      背景

      最近處理文本文檔時(文件約2GB大小),出現(xiàn)memoryError錯誤和文件讀取太慢的問題,后來找到了兩種比較快Large File Reading 的方法,本文將介紹這兩種讀取方法。

      準備工作

        我們談到“文本處理”時,我們通常是指處理的內(nèi)容。Python 將文本文件的內(nèi)容讀入可以操作的字符串變量非常容易。文件對象提供了三個“讀”方法: .read()、.readline() 和 .readlines()。每種方法可以接受一個變量以限制每次讀取的數(shù)據(jù)量,但它們通常不使用變量。 .read() 每次讀取整個文件,它通常用于將文件內(nèi)容放到一個字符串變量中。然而.read() 生成文件內(nèi)容最直接的字符串表示,但對于連續(xù)的面向行的處理,它卻是不必要的,并且如果文件大于可用內(nèi)存,則不可能實現(xiàn)這種處理。下面是read()方法示例:

      try:
      f = open('/path/to/file', 'r')
      print f.read()
      finally:
      if f:
      f.close()

        調(diào)用read()會一次性讀取文件的全部內(nèi)容,如果文件有10G,內(nèi)存就爆了,所以,要保險起見,可以反復(fù)調(diào)用read(size)方法,每次最多讀取size個字節(jié)的內(nèi)容。另外,調(diào)用readline()可以每次讀取一行內(nèi)容,調(diào)用readlines()一次讀取所有內(nèi)容并按行返回list。因此,要根據(jù)需要決定怎么調(diào)用。

        如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復(fù)調(diào)用read(size)比較保險;如果是配置文件,調(diào)用readlines()最方便:

      for line in f.readlines():
      process(line) #

        

      分塊讀取

      處理大文件是很容易想到的就是將大文件分割成若干小文件處理,處理完每個小文件后釋放該部分內(nèi)存。這里用了iter 和 yield:

      def read_in_chunks(filePath, chunk_size=1024*1024):
      """
      Lazy function (generator) to read a file piece by piece.
      Default chunk size: 1M
      You can set your own chunk size
      """
      file_object = open(filePath)
      while True:
      chunk_data = file_object.read(chunk_size)
      if not chunk_data:
      break
      yield chunk_data
      if __name__ == "__main__":
      filePath = './path/filename'
      for chunk in read_in_chunks(filePath):
      process(chunk) # 

      使用With open()

      with語句打開和關(guān)閉文件,包括拋出一個內(nèi)部塊異常。for line in f文件對象f視為一個迭代器,會自動的采用緩沖IO和內(nèi)存管理,所以你不必擔(dān)心大文件。

      代碼如下:

      #If the file is line based
      with open(...) as f:
        for line in f:
          process(line) # 

      優(yōu)化

      面對百萬行的大型數(shù)據(jù)使用with open 是沒有問題的,但是這里面參數(shù)的不同也會導(dǎo)致不同的效率。經(jīng)過測試發(fā)先參數(shù)為"rb"時的效率是"r"的6倍。由此可知二進制讀取依然是最快的模式。

      with open(filename,"rb") as f: 
        for fLine in f: 
          pass

      測試結(jié)果:rb方式最快,100w行全遍歷2.9秒。基本能滿足中大型文件處理效率需求。如果從rb(二級制讀取)讀取改為r(讀取模式),慢5-6倍。

      結(jié)論

        在使用python進行大文件讀取時,應(yīng)該讓系統(tǒng)來處理,使用最簡單的方式,交給解釋器,就管好自己的工作就行了。同時根據(jù)不同的需求可以選擇不同的讀取參數(shù)進一步獲得更高的性能。

      關(guān)于“如何使用Python讀取大文件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      分享題目:如何使用Python讀取大文件-創(chuàng)新互聯(lián)
      文章出自:http://www.ef60e0e.cn/article/dggosd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        紫阳县| 阿勒泰市| 平陆县| 蛟河市| 通许县| 新乡县| 宜兴市| 波密县| 玉门市| 遂溪县| 正安县| 玉屏| 常山县| 东兰县| 油尖旺区| 固阳县| 新乐市| 迭部县| 娄底市| 富阳市| 铜陵市| 宁强县| 屯昌县| 城固县| 保德县| 鄯善县| 曲阜市| 唐山市| 长春市| 中宁县| 海原县| 台中市| 上林县| 杭锦旗| 都江堰市| 泽库县| 钟山县| 鸡泽县| 贵德县| 蕲春县| 关岭|