将字符串列表追加到CSV的第一列

时间:2018-11-10 00:08:46

标签: python-2.7 list csv

我有以下格式的列表列表:

test_data = [[0.09792, 0.04583, 0.01667, 0.05208, 0.02917, 0.0375, 0.03958, 0.11042, 0.03542, 0.01667, 0.13125, 0.01667, 0.01875, 0.04583, 0.1, 0.05833, 0.06042, 0.00625, 0.03333, 0.04792], 
            [0.0709, 0.04104, 0.0398, 0.06343, 0.02239, 0.03109, 0.07463, 0.04851, 0.01493, 0.05597, 0.11194, 0.0597, 0.04104, 0.03731, 0.02612, 0.0995, 0.05224, 0.00373, 0.02985, 0.07587], 
            [0.1232, 0.0704, 0.0128, 0.056, 0.024, 0.032, 0.0528, 0.0656, 0.0256, 0.0384, 0.1088, 0.0368, 0.0352, 0.0352, 0.0688, 0.0528, 0.0336, 0.0096, 0.0384, 0.08]

这只是完整数据的一个子集,其中包含更多子列表。我使用以下代码将数据写入csv,如下所示:

import csv
import sys
with open("my_data.csv", "wb") as my_csv:    
    w = csv.writer(my_csv, sys.stdout)
    w.writerow(column_headers)
    w.writerows(zip(*test_data))

“ column_headers”变量是一个字符串列表,长度为24个元素,被写为第一行以用作列标识符。其格式为:

column_headers = ['header_1', 'header_2', ....., 'header_24']

输出的csv表如下所示:

header_1,  header_2,  header_3, ...., header_24
0.0979,    0.0709,    0.1232,   ...., 0.0688
0.0458,    0.0410,    0.0704,   ...., 0.0527
0.0166,    0.0398,    0.0128,   ...., 0.0389

我想添加一个字符串列表作为新的第一列,它将代表行ID,以便表格式如下:

row_id = ['row_id', 'a', 'b', 'c'...., 'k']

row_id,  header_1,  header_2,  header_3, ...., header_24
a        0.0979,    0.0709,    0.1232,   ...., 0.0688
b        0.0458,    0.0410,    0.0704,   ...., 0.0527
c        0.0166,    0.0398,    0.0128,   ...., 0.0389

我使用以下代码执行此操作:

for ind, line in enumerate(fileinput.input("my_data.csv", inplace = True)):
    sys.stdout.write("{},{}\n".format(line.rstrip(), row_id[ind]))

不幸的是,数据以不同的格式输出。字符串列表位于最后一列。看起来像这样:

    header_1,  header_2,  header_3, ...., header_24,  row_id
    0.0979,    0.0709,    0.1232,   ...., 0.0688,     a
    0.0458,    0.0410,    0.0704,   ...., 0.0527,     b
    0.0166,    0.0398,    0.0128,   ...., 0.0389,     c

如何调整上面的代码以根据需要将row_id放在第一列中?

感谢您的时间

3 个答案:

答案 0 :(得分:0)

它只是交换2个参数的顺序!感谢@ rishabh.bhardwaj在我的原始帖子的评论中。见下文:

for ind, line in enumerate(fileinput.input("my_data.csv", inplace = True)):
    sys.stdout.write("{},{}\n".format(row_id[ind], line.rstrip())

答案 1 :(得分:0)

尝试一下:

for ind, line in enumerate(fileinput.input("my_data.csv", inplace = True)):
    sys.stdout.write(f"{row_id[ind]},{line.rstrip()}\n")

答案 2 :(得分:0)

sys.stdout.write("{},{}\n".format(row_id[ind], line.rstrip())