国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

強(qiáng)悍的Python讀取大文件的解決方案

2020-02-16 01:11:54
字體:
供稿:網(wǎng)友

Python 環(huán)境下文件的讀取問題,請參見拙文 Python基礎(chǔ)之文件讀取的講解

這是一道著名的 Python 面試題,考察的問題是,Python 讀取大文件和一般規(guī)模的文件時的區(qū)別,也即哪些接口不適合讀取大文件。

1. read() 接口的問題

f = open(filename, 'rb')f.read()

我們來讀取 1 個 nginx 的日至文件,規(guī)模為 3Gb 大小。read() 方法執(zhí)行的操作,是一次性全部讀入內(nèi)存,顯然會造成:

MemoryError
...

也即會發(fā)生內(nèi)存溢出。

2. 解決方案:轉(zhuǎn)換接口

(1)readlines() :讀取全部的行,構(gòu)成一個 list,實踐表明還是會造成內(nèi)存的問題;
for line in f.reanlines():  ...
(2)readline():每次讀取一行,
while True:  line = f.readline()  if not line:    break
(3)read(1024):重載,指定每次讀取的長度
while True:  block = f.read(1024)  if not block:    break

3. 真正 Pythonic 的方法

真正 Pythonci 的方法,使用 with 結(jié)構(gòu):

with open(filename, 'rb') as f:  for line in f:    <do something with the line>

對可迭代對象 f,進(jìn)行迭代遍歷: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.

Reference

How to read large file, line by line in python

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對武林站長站的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 开平市| 鄂州市| 健康| 瑞昌市| 霍山县| 勃利县| 布尔津县| 满城县| 从江县| 咸丰县| 高淳县| 禄丰县| 大同市| 济源市| 米脂县| 朔州市| 大竹县| 莲花县| 漳平市| 兴化市| 波密县| 新晃| 文山县| 天水市| 久治县| 新竹市| 什邡市| 固始县| 天镇县| 昭通市| 江永县| 寻甸| 自治县| 榆树市| 赤壁市| 琼中| 贡觉县| 南宁市| 霍州市| 丘北县| 依兰县|