我经常使用csv reader和for循环遍历每一行,解析大量数据文件(通常是.csv文件或类似文件)。这些数据通常都是浮点型表格数据,例如:
reader = csv.reader(open('somefile.csv'))
header = reader.next()
res_list = [list() for i in header]
for line in reader:
for i in range(len(line)):
res_list[i].append(float(line[i]))
result_dict = dict(zip(header,res_list)) #so we can refer by column title
这是一种不错的方法,可以将每个列作为单独的列表填充。然而,我更希望用于项目列表(和嵌套列表)的默认数据容器为numpy数组,因为99次中有99次的数字被传输到各种处理脚本/函数中,使用numpy列表能够让我的生活更轻松。
numpy的
append(arr, item)
不会就地添加元素,因此需要为表中的每个点重新创建数组(这是缓慢且不必要的)。我也可以遍历数据列的列表,并在完成后将它们包装成一个数组(这就是我一直在做的),但有时并不那么清晰,不知道何时完成文件解析,可能需要在以后的某个时间点附加内容到列表中。我想知道是否有一些 less-boiler-heavy 的方式(用过度使用的“pythonic”短语来描述),以类似的方式处理数据表,或者动态地填充数组(其中底层容器为列表),而不需要一直复制数组。
(另外注意:通常人们使用列来组织数据,但是csv读入行,如果读取器包含read_column参数(是的,我知道它不会非常高效),我认为很多人都会避免像上面那样的模板代码来解析csv数据文件。)