更快的方法来读取和追加文件中的多个列?

时间:2017-08-31 15:43:00

标签: python python-3.x file-io

我的文件有多列,我将它们存储在列表中供以后使用。但有时我不知道究竟有多少列,所以我必须不断调整我定义的列表数量。

因此我想知道是否有更快的方法来定义 n 数量的列表,所以我不必担心像我一样追加每一个列表在下面做什么?

col_header = []    
c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11 = [[] for i in range(11)]
    with open(file_name, 'r') as f:
        reader = csv.reader(f)
        for i, row in enumerate(reader):
            if i == 0:
                col_header.append(row)
            elif len(row)!=0:
                c1.append(float(row[0]))
                c2.append(float(row[1]))
                c3.append(float(row[2]))
                c4.append(float(row[3]))
                c5.append(float(row[4]))
        #etc..

3 个答案:

答案 0 :(得分:1)

list_of_lists =[c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11]   
for list in list_of_lists:
   list.append(float(row[0]))

请注意,在Python中,代码

list0 = [value0]
list_of_list[0] = list0
list_of_list[0].append(value1)
print(list0)

将输出[value0,value2]; list_of_list不包含list0的副本,但是对list0的引用,因此更改list_of_list [0]也会更改list0。

您也可以使用Panda DataFrames或numPy数组,然后您不必处理所有这些for循环,您可以使用pd.read_csv然后将该数据帧附加到原始数据框。

答案 1 :(得分:0)

您可以定义包含所有c

的列表c1, c2, c3...

答案 2 :(得分:0)

正如其他人所说,你应该将列设置为列表,这可能是一个好的开始。

col_header = []

def create_columns(n):
    list_of_columns = []
    for i in range(n):
        list_of_columns.append([])

    return list_of_columns

columns = create_columns(10)
with open(file_name, 'r') as f:
    reader = csv.reader(f)
    for i, row in enumerate(reader):
        if i == 0:
            col_header.append(row)
        elif len(row)!=0:
            for index, col in enumerate(columns):
                col.append(float(row[index]))