Python:写入csv,为动态数量的输出列创建标头

时间:2017-10-24 05:26:46

标签: python list csv

我有以下变量:

InputNumber(用户定义为1到6),

nameofstate(2个名字的列表,让他们称之为X和Y)

list[state][protein][counts][x] list[state][protein][counts][y],其中x和y是等于InputNumber

长度的列表

所以InputNumber = 3

list[state][protein][counts][x] = [a,b,c]
list[state][protein][counts][y] = [r,s,t]

InputNumber = 4

list[state][protein][counts][x] = [a,b,c,d]
list[state][protein][counts][y] = [r,s,t,u]

我想为这些计数创建新列,但我无法弄清楚如何制作动态列标题:

Name    X1  X2  X3  Y1  Y2  Y3  Name    X1  X2 X3 X4 Y1 Y2 Y3 Y4        
Name    a   b   c   r   s   t   Name    a   b  c  d  r  s  t  u  

以下是我的标题代码:

    listheaders = [str(nameofstate[0]) + str(x + 1) for x in range(0, InputNumber), str(nameofstate[1]) + str(x + 1) for x in range(0, InputNumber)]
    with open("PATH and NAME" + ".csv", 'w') as myfile:
        wr = csv.writer(myfile, delimiter=',', lineterminator='\n')
        wr.writerow(["Name", (i for i in listheaders[0]), (e for e in listheaders[1]])
        for name in anotherlist:
            perform the same iterative code

我的问题在于生成器表达式 - 我无法解释如何告诉它解压缩listheaders中的条目。

1 个答案:

答案 0 :(得分:0)

我不确定我是否会按照您的问题中发生的所有事情进行操作,但似乎您在listheaders中尝试做的太多了。如果我理解正确,你想使用辅助函数来构造

def _get_header_list(name_of_state, input_number):
    return ['{}{}'.format(name_of_state, str(x)) for x in range(1, input_number + 1)]

first_list = _get_header_list(nameofstate[0], InputNumber)
second_list = _get_header_list(nameofstate[1], InputNumber)

然后......

wr.writerow(['Name'] + first_list + second_list)