Python处理大型文件

 

读取文件


# 规则数据

能使用numpy就用numpy,对更复杂的数据文件,比如列非常多时,用pandas。pandas的效率非常高。

 

# 不规则数据

处理数据时,发现数据中列的维数参差不齐,可以使用numpy或者pandas,但缺省值非常多,后续处理不方便,权衡之下,还是按行读取。
#If the file is line based
with open(...) as f:
    for line in f:
        process(line) # <do something with line>

或者可以使用fileinput,自带buffer,效果与前者没有明显差异。

import fileinput
for line in fileinput.input([""]):
    if not line:
        break
    process(line)

file.read(),file.readline(),file.readlines()

file.read()会一次性读取文件的所有内容,所以读取大文件时内存容易爆,可以反复调用read(size),但后续处理不便;file.readline()比较常用,适用于小文件;file.readlines()会一次性读取文件的所有内容并返回一个行的列表,所以也只适用于小文件。


Tips


  • 也可以把大文件分割成小文件处理,处理完每个小文件后释放该部分内存
    while True:
           chunk_data = file.read(size)
           if not chunk_data:
               break
           process(chunk_data)
  • 在运算时,尽量少使用字典,虽然字典很方便,但会产生大量的时间开销
  • 与其多次使用字典的合并操作,不如开始只维护一个字典,后面再往里面填
  • 基础的部分自己写,少调包

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *