這是壹個著名的Python面試問題,考察了Python讀取大文件和普通文件的區別,即哪些接口不適合讀取大文件。
1的問題。read()接口
f =打開(文件名,‘Rb‘)
f . read()12
讓我們讀取1個大小為3Gb的nginx至日文件。read()方法執行的操作是壹次性將所有數據讀入內存,這顯然會導致:
記憶誤差...12
也就是說,將發生內存溢出。
2.解決方案:轉換接口
(1)readlines():讀取所有行以形成壹個列表,該列表被證明會導致內存問題;
對於f.reanlines()中的行:...
1
2
(2)readline():壹次讀取壹行,
雖然正確:
line = f.readline()如果不是line: break
1
2
三
四
(3)read(1024):重載,指定每次讀取的長度。
如果為真:block = f . read(1024)如果不是block: break
1
2
三
四
3.真正的Pythonic方法
True Pythonci方法,使用with結構:
用open(文件名,‘Rb‘)作為f:表示f:
& lt用這行代碼做點什麽& gt123
對於叠代對象F,叠代F中的行,這將自動使用IO(緩沖IO和內存管理,而不用擔心任何大文件問題。
應該有壹種——最好只有壹種——顯而易見的方法來做到這壹點。