日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Read a large file with python

發(fā)布時間:2025/3/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Read a large file with python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

python讀取大文件

  • 較pythonic的方法,使用with結(jié)構(gòu)
    • 文件可以自動關(guān)閉
    • 異常可以在with塊內(nèi)處理
    with open(filename, 'rb') as f: for line in f:<do someting with the line>
  • 最大的優(yōu)點:對可迭代對象 f,進行迭代遍歷:for line in f,會自動地使用緩沖IO(buffered IO)以及內(nèi)存管理,而不必?fù)?dān)心任何大文件的問題。

    There should be one – and preferably only one – obvious way to do it.

  • 使用生成器generator
  • 如果想對每次迭代讀取的內(nèi)容進行更細(xì)粒度的處理,可以使用yield生成器來讀取大文件

    def readInChunks(file_obj, chunkSize=2048):"""Lazy function to read a file piece by piece. Default chunk size: 2kB."""while True:data = file_obj.read(chunkSize)if not data:breakyield dataf = open('bigFile')for chunk in readInChunks(f):do_something(chunk)f.close()
  • linux下使用split命令(將一個文件根據(jù)大小或行數(shù)平均分成若干個小文件)
  • wc -l BLM.txt # 讀出BLM.txt文件一共有多少行# 利用split進行分割split -l 2482 ../BLM/BLM.txt -d -a 4 BLM_# 將 文件 BLM.txt 分成若干個小文件,每個文件2482行(-l 2482),文件前綴為BLM_ ,系數(shù)不是字母而是數(shù)字(-d),后綴系數(shù)為四位數(shù)(-a 4) # 按行數(shù)分割split -l 300 large_file.txt new_file_prefix# 文件大小分割split -b 10m server.log waynelog# 對文件進行合并:使用重定向,'>' 寫入文件 , '>>' 追加到文件中cat file_prefix* > large_file

    在工作中的日常: 用戶信息,log日志緩存,等都是大文件

    補充:linecache模塊

    當(dāng)讀取一個文件的時候,python會嘗試從緩存中讀取文件內(nèi)容,優(yōu)化讀取速度,提高效率,減少了I/O操作

    linecache.getline(filename, lineno) 從文件中讀取第幾行,注意:包含換行符
    linecache.clearcache() 清除現(xiàn)有的文件緩存
    linecache.checkcache(filename=None) 檢查緩存內(nèi)容的有效性,可能硬盤內(nèi)容發(fā)生改變,更新了,如果沒有參數(shù),將檢查緩存中的所有記錄(entries)

    import linecachelinecache.getline(linecache.__file__, 8)

    題目:
    現(xiàn)給一個文件400M(該文件是由/etc/passwd生成的),統(tǒng)計其中root字符串出現(xiàn)的次數(shù)

    import timesum = 0start = time.time()with open('file', 'r') as f:for i in f:new = i.count('root')sum+=newend = time.time()print(sum, end-start)

    :有時候這個程序比c,shell快10倍,原因就是,python會讀取cache中的數(shù)據(jù),使用緩存在內(nèi)部進行優(yōu)化,減少i/o,提高效率

    References : How to read a large file

    轉(zhuǎn)載于:https://www.cnblogs.com/panlq/p/10618852.html

    總結(jié)

    以上是生活随笔為你收集整理的Read a large file with python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。