天天看點

python-problem-大檔案的讀取

python讀取大檔案

一.問題

部落客在使用glove840b詞向量的時候,遇到的一些坑。這個詞向量大概有5.25個G容量,并且我需要按照行來進行處理。然後我直接用了

f = open(path,encoding="utf-8").readlines()           

然後記憶體就炸了。我可是16G的記憶體呢。

二.對比幾種讀檔案的方法

1.with

with open(path, encoding="utf-8") as f:
    for line in f:
        dosomething()           

隻占用4.6M記憶體

注意這種方法每一行最後會有一個’\n’

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

2.直接周遊

f = open(path, encoding="utf-8")
for line in f:
    dosomething()           

注意這種方法每一行最後會有一個’\n’

這裡我想說用

with

和直接每次讀一行進行周遊,實際上是一樣的效果的。隻是

with

有一些好處,我打算下一章專門寫一下

with

。先舉個列子,用

with

,就不用在讀檔案結束的時候寫

f.close()

了。

3.使用readlines()

f = open(path, encoding="utf-8").readlines()
for line in f:
    dosomething()           

這種方法會把整個檔案一次性加載在記憶體中,對于小檔案來說,處理起來,速度會更快。

但是加載5.25的G的文本的時候,記憶體直接就爆滿了。

4.使用yield配合readline

三.總結

盡量使用with的方法吧。

但是如果文章真的不是很大的話,或者記憶體足夠大的話,還是用readlines比較好,速度能夠提升好多。可以具體比較一下。

參考

https://stackoverflow.com/questions/8009882/how-to-read-large-file-line-by-line-in-python