1 with open('a.csv','r') as f: 2 #1 3 for i in f: 4 print(i) 5 #2 6 while True: 7 a = f.readline() 8 if not a: 9 break10 #311 f.readlines()
用with语句打开文件返回一个可以迭代的文件对象绑定在as后的变量f;
第一种:直接遍历文件对象,会自动使用IO缓存和内存管理,是一种很好的方法;
第二种:调用readline()方法,一次读取一行,也不会占用太大内存,但代码显得臃肿,而且,虽然readline()方法是用C实现的,但相比于1的直接操作文件对象,速度上并没有明显的提升;
第三种:调用readlines()方法,返回的是一个包含所有文件元素的列表,如果文件很大(1个G),那就很占用内存,所以大文件情况下,最不推荐这种方法。
综上:推荐第一种写法,即直接遍历文件对象。
另外,还可以用pandas提供的分块读取功能,下一篇详细介绍。