python 大檔案的讀取

2021-09-22 10:13:29 字數 3272 閱讀 6037

在這裡插入**片很久以前做數學建模的時候面臨了一回大檔案的讀取問題,當時沒有什麼程式設計經驗就使用如下的**進行了讀取。

with

open

(filename,

'rb'

)as fp:

for line in fp.readlines():

do_something(line)

這種**在檔案比較小時倒也沒有太大影響,但是面臨大檔案時就無解了。

分析**: (可以使用memory_profiler.profile函式對**的記憶體使用進行分析,這裡使用了裝飾器)

from memory_profiler import profile

@profile

deffunc

(filename)

:with

open

(filename,

'rb'

)as fp:

for line in fp.readlines():

#do_something(line)

pass

if __name__ ==

'__main__'

: func(

'test_file'

)

得到如下結果

line #    mem usage    increment   line contents

====

====

====

====

====

====

====

====

====

====

====

====

3516.1 mib 16.1 mib @profile

36deffunc

(filename):37

16.1 mib 0.0 mib with

open

(filename,

'rb'

)as fp:

3818.6 mib 2.5 mib for line in fp.readlines():

39#do_something(line)

4018.6 mib 0.0 mib pass

這樣就「成功」把檔案全部載入進記憶體了。 【捂臉】

後面獲得了好友的點播,我也知道了優化方法了。

按行讀取

wiht open

('test_file'

,'rb'

)as fp:

for line in fp:

# 這裡將fp檔案物件作為乙個可迭代物件進行迭代

# do something with line

pass

讀取固定大小
with

open

('test_file'

,'rb'

)as fp:

while

true

: buf = fp.read(batch_size)

if buf:

# do something with buf

pass

else

:break

實現檔案讀取的滑動視窗

通過檔案游標的移動實現

def

window_read

(filename)

:with

open

(filename,

'rb'

)as fp:

file_size = os.path.getsize(filename)

while

true

: buf = fp.read(

100)

if buf:

print

(buf)

if fp.tell(

)== file_size:

break

else

: fp.seek(-20

,1)else

:break

記憶體使用結果:

line #    mem usage    increment   line contents

====

====

====

====

====

====

====

====

====

====

====

====

416.1 mib 16.1 mib @profile

5defwindow_read

(filename):6

16.1 mib 0.0 mib with

open

(filename,

'rb'

)as fp:

716.1 mib 0.0 mib file_size = os.path.getsize(filename)

816.1 mib 0.0 mib while

true:9

16.1 mib 0.0 mib buf = fp.read(

100)

1016.1 mib 0.0 mib if buf:

1116.1 mib 0.0 mib print

(buf)

1216.1 mib 0.0 mib if fp.tell(

)== file_size:

1316.1 mib 0.0 mib break

14else:15

16.1 mib 0.0 mib fp.seek(-20

,1)16

else:17

break

python 讀取大檔案

以前一直沒有關注過python讀取大檔案的問題,因為一直都是順順暢暢地讀取了檔案。直到今天有人問我python怎麼讀取檔案出現了記憶體不足的錯誤?我才發現原來大檔案 gb級別 的讀取和普通檔案的讀取是不一樣的。下面介紹三種我親測可用的方法。這裡的檔案型別可以是txt,dat等型別的檔案。用read ...

python讀取大檔案

最近在學習python的過程中接觸到了python對檔案的讀取。python讀取檔案一般情況是利用open 函式以及read 函式來完成 f open filename,r f.read 這種方法讀取小檔案,即讀取遠遠大小小於記憶體的檔案顯然沒有什麼問題。但是如果是將乙個10g大小的日誌檔案讀取,即...

python讀取大檔案 python讀取大檔案

python讀取檔案對各列進行索引 可以用readlines,也可以用readline,如果是大檔案一般就用readlined a in open testfile.txt r for line in a in columnssplit line.rstrip split d columnsspli...