Python之讀取大型文本文件

以前接觸的數據,不管是csv仍是txt格式,都比較小,最大也就幾百兆。在讀取過程當中不會遇到內存崩潰的現象。spa

最近,項目中接收到的數據居然比電腦內存還要大 ,讀取過程當中常常遇到memoryError錯誤,因而開始研究了關於大文件讀取;於此參考瞭如下博客:.net

https://blog.csdn.net/u011847043/article/details/81069105對象


 

談到「文本處理」時,咱們一般是指處理的內容。blog

Python 將文本文件的內容讀入能夠操做的字符串變量很是容易。文件對象提供了三個「讀」方法: .read()、.readline() 和 .readlines()。。內存

read() 一次性讀取讀取整個文件,將文件存儲在一個字符串變量中。當文件接近或者大於內存時會產生memoryError的錯誤。utf-8

readline() 和 readlines() 之間的差別是後者一次讀取整個文件,同 read()。文檔

readlines() 自動將文件內容分析成一個行的列表,該列表能夠由 Python 的 for ... in ... 結構進行處理。字符串

另外一方面,.readline() 每次只讀取一行,一般比 readlines() 慢得多。僅當沒有足夠內存能夠一次讀取整個文件時,應該使用 .readline()。博客

with open('filepath', 'r', encoding = 'utf-8') as f:
  while True:
    line = f.readline() # 逐行讀取
    if not line: # 到 EOF,返回空字符串,則終止循環
      break
    Operate(line) #對每行數據進行處理it

分塊讀取(實用靠譜)

將文檔按塊進行讀取

def read_in_chunks(filePath, chunk_size=1024*1024):   file_object = open(filePath,'r',encoding='utf-8')   while True:     chunk_data = file_object.read(chunk_size)     if not chunk_data:       break     yield chunk_dataif __name__ == "__main__":   filePath = "C:/Users/Public/Documents/data/user_data.csv"   for chunk in read_in_chunks(filePath):     print(chunk)

相關文章
相關標籤/搜索