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)
- 在运算时,尽量少使用字典,虽然字典很方便,但会产生大量的时间开销
- 与其多次使用字典的合并操作,不如开始只维护一个字典,后面再往里面填
- 基础的部分自己写,少调包
发表评论