如何优化Python中CSV文件的加载与解析速度?
CSV解析函数性能优化建议
针对你编写的CSV解析函数,结合你提到的map函数、减少点标记调用等优化方向,下面给出几个实用的改进方案,兼顾性能与代码健壮性:
1. 用map+直接迭代文件对象替代循环append
原代码里的readlines()会一次性把所有行加载到内存,换成直接迭代文件对象(逐行读取)更节省内存,再用map处理每行的rstrip和split操作,效率比手动for循环更高:
def get_data(filename): """从CSV文件返回包含表头的嵌套列表""" with open(filename) as infile: return list(map(lambda line: line.rstrip().split(","), infile))
2. 提前绑定字符串方法,减少属性查找开销
把str.rstrip和str.split提前赋值给变量,避免每次循环都去字符串类中查找方法,这就是你提到的"减少点标记调用"技巧(优化幅度不大,但属于实用的性能细节):
def get_data(filename): """从CSV文件返回包含表头的嵌套列表""" rstrip = str.rstrip split = str.split with open(filename) as infile: return [split(rstrip(line), ",") for line in infile]
这里用列表推导式替代map,可读性更好,性能和map相差无几。
3. 推荐使用标准库csv模块(最优方案)
手动用split(",")存在很多隐患,比如字段内包含逗号(用引号包裹的情况)、字段内换行等,而Python标准库的csv模块是C扩展实现,性能远超手动Python代码,还能完美处理各种CSV边缘场景:
import csv def get_data(filename): """从CSV文件返回包含表头的嵌套列表""" with open(filename, newline='') as infile: reader = csv.reader(infile) return list(reader)
这个方案不仅速度更快,还能避免手动解析的bug,是生产环境的首选。
内容的提问来源于stack exchange,提问作者Andrew Lindsay
相关产品推荐
相关产品推荐

