python大檔案操作

2021-09-10 12:18:04 字數 1744 閱讀 4558

我們知道python進行資料處理時有相應的庫,此篇只是針對python標準庫中file檔案操作中的read,readline,readlines等進行介紹

我們使用file讀取檔案時常看到直接使用read(),readlines()等一次性把檔案讀取完畢,這樣對小檔案來說當然可以,但是對於大檔案來說就可能會出現記憶體洩漏的問題。

當預設引數size=-1時,read方法會讀取直到eof,當檔案大小大於可用記憶體時,自然會發生記憶體溢位的錯誤。

同樣的,readlines會構造乙個list。list而不是iter,所以所有的內容都會儲存在記憶體之上,同樣也會發生記憶體溢位的錯誤。

如果是二進位制檔案推薦用如下這種寫法,可以自己指定緩衝區有多少byte。顯然緩衝區越大,讀取速度越快。

with

open

(file_path,

'rb'

)as f:

while

true

: buf = f.read(

1024

)if buf:

執行操作

else

:break

而如果是文字檔案,則可以用readline方法或直接迭代檔案(python這裡封裝了乙個語法糖,二者的內生邏輯一致,不過顯然迭代檔案的寫法更pythonic,每次讀取一行,效率是比較低的。筆者簡單測試了一下,在3g檔案之下,大概效能和前者差了20%.

with

open

(file_path,

'rb'

)as f:

while

true

: line = f.readline(

)if buf:

print

(line)

else

:break

with

open

(file_path,

'rb'

)as f:

for line in f:

print

(line)

還可以將readline替換成readlines(),增加一次讀取的行數

with

open

(file_path,

'rb'

)as f:

while

true

:# 引數表示一次讀取指定size的行數,函式會自動讀取整行,所以大小不會很精確

line = f.readlines(

102400

)if buf:

print

(line)

else

:break

最後:其實我們用file處理超大檔案的頻率很小,平時我們操作小檔案時可以一次性讀取,因為頻繁操作檔案也是耗時操作,這裡的取捨要根據實際情況來看。像上面迴圈讀取檔案,我們可以使用yield來迭代結果,減小記憶體消耗。

python正則操作大檔案

開啟檔案的模式說明 開啟檔案的模式有 預設為文字模式 模式 說明 修改檔案內容方法一 import os with open a.txt as read f,open a.txt.swap w as write f data read f.read 全部讀入記憶體,如果檔案很大,會很卡 data d...

ruby 操作大檔案

本人測試的ruby版本是ruby1.9.3p286 首先我讀取乙個 100m 的1.txt檔案 然後將它完全複製到另乙個2.txt中,發現只能複製45736kb 主要部分如下 puts 檔案大小是 位元組 檔案再大它的大小還是能夠正確的讀出來的 while value file.gets file1...

python 讀取大檔案

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