一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python 讀取大文件

 oskycar 2018-04-25

簡述

在處理大數(shù)據(jù)時,有可能會碰到好幾個 G 大小的文件。如果通過一些工具(例如:NotePad++)打開它,會發(fā)生錯誤,無法讀取任何內(nèi)容。

那么,在 Python 中,如何快速地讀取這些大文件呢?

版權(quán)所有:一去丶二三里,轉(zhuǎn)載請注明出處:http://blog.csdn.net/liang19890820

一般的讀取

讀取文件,最常見的方式是:

with open('filename', 'r', encoding = 'utf-8') as f:
    for line in f.readlines():
        do_something(line)
  • 1
  • 2
  • 3

但是,當(dāng)完成這一操作時,readlines() 方法(read() 也一樣)會將整個文件加載到內(nèi)存中。在文件較大時,往往會引發(fā) MemoryError(內(nèi)存溢出)。

那么,如何避免這個問題?

使用 fileinput 模塊

稍微好點(diǎn)兒的方式是使用 fileinput 模塊:

import fileinput

for line in fileinput.input(['filename']):
    do_something(line)
  • 1
  • 2
  • 3
  • 4

調(diào)用 fileinput.input() 會按照順序讀取行,但是在讀取之后不會將它們保留在內(nèi)存中。

逐行讀取

除此之外,也可使用 while() 循環(huán)和 readline() 來逐行讀取:

with open('filename', 'r', encoding = 'utf-8') as f:
    while True:
        line = f.readline()  # 逐行讀取
        if not line:  # 到 EOF,返回空字符串,則終止循環(huán)
            break
        do_something(line)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

指定每次讀取的長度

有時,可能希望對每次讀取的內(nèi)容進(jìn)行更細(xì)粒度的控制。

在這種情況下,可以使用 iteryield

def read_in_chunks(file_obj, chunk_size = 2048):
    """
    逐件讀取文件
    默認(rèn)塊大?。?KB
    """
    while True:
        data = file_obj.read(chunk_size)  # 每次讀取指定的長度
        if not data:
            break
        yield data

with open('filename', 'r', encoding = 'utf-8') as f:
    for chuck in read_in_chunks(f):
        do_something(chunk)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

自動管理

這才是 Pythonci 最完美的方式,既高效又快速:

with open('filename', 'r', encoding = 'utf-8') as f:
    for line in f:
        do_something(line)
  • 1
  • 2
  • 3

with 語句句柄負(fù)責(zé)打開和關(guān)閉文件(包括在內(nèi)部塊中引發(fā)異常時),for line in f 將文件對象 f 視為一個可迭代的數(shù)據(jù)類型,會自動使用 IO 緩存和內(nèi)存管理,這樣就不必?fù)?dān)心大文件了。

更多參考

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩亚洲精品内裤| 亚洲av日韩av高潮无打码| 亚洲国产精品久久综合网| 三级高清有码在线观看| 青青草草免费在线视频| 国产精品伦一区二区三区四季 | 欧美日韩国产成人高潮| 91蜜臀精品一区二区三区| 国产午夜精品亚洲精品国产| 欧美精品一区二区水蜜桃| 欧美一级特黄大片做受大屁股| 日韩人妻精品免费一区二区三区 | 欧美日韩在线第一页日韩| 国产精品超碰在线观看| 国产情侣激情在线对白| 亚洲熟女一区二区三四区| 亚洲国产精品久久琪琪| 亚洲国产成人爱av在线播放下载| 男女午夜视频在线观看免费| 日本在线高清精品人妻| 爱在午夜降临前在线观看| 亚洲欧美日本国产不卡| 欧美日韩精品久久第一页 | 国产精品免费视频久久| 欧美日韩精品久久亚洲区熟妇人| 国产欧美日本在线播放| 亚洲国产精品一区二区| 国产精品国产亚洲看不卡| 国产91色综合久久高清| 国产高清三级视频在线观看| 日韩一本不卡在线观看| 午夜福利视频六七十路熟女| 中文字幕亚洲视频一区二区| 色婷婷中文字幕在线视频| 成在线人免费视频一区二区| 日韩精品日韩激情日韩综合| 日韩色婷婷综合在线观看| 91麻豆精品欧美一区| 又黄又硬又爽又色的视频| 少妇福利视频一区二区| 四季精品人妻av一区二区三区 |