其实好多回答有点宽泛,例如我就需要csv文件按行读取,而且每行例如是个list,每个字段的数据是需要做数据分析的,所以我需要按行读取,不是简单的将整个文件读出来就完事了,读取后需要做数据处理;
百度到一个答案感觉可能是我需要的,如下:
需要的注意的点有:1. 在读完若干行数据以后,需要获取一下当前这个file object的位置,Python提供了.tell()方法来获取这个值;2. 读取文件的时候需要知道上一会读到什么地方了,并且从那里继续往下读,用到了.seek()方法;3. readline()方法在读到文件末尾的时候只会返回一个空字符,所以需要对这个空字符做一点处理。
def readcsv2list(filename, rows, last_position, max_line):
fileobj = open(filename, 'rb')
fileobj.seek(last_position)#seek定义文件读取的开始位置
datalines = []
for i in range(max_line):
line_itme = fileobj.readline()
if len(line_itme) > 0:
datalines.append(line_itme)
else:
break
csvreader = csv.reader(datalines)
retlist = []
for row in csvreader:
clist = []
selected_rows = [ic for ic in range(len(row)) if ic not in rows]
for c in selected_rows:
clist.append(row[c])
retlist.append(clist)
current_position = fileobj.tell()
fileobj.close()
return retlist, current_position
Python,尤其是低版本(例如我们用的2.4.3),对于在程序里面显式地del一些变量(通常是个大list之类),是不会立刻释放内存的,所以对于处理数据量比较大的case的时候就需要特别注意内存的使用
|