2016-10-03 61 views
2

使用Python,我有存储在列表中的数据:的Python:写列表到CSV,调换第一行成列

a = [['a', 'b', 'c'], [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 

我想写这个列表到CSV,看起来像下面这样:

a, 1, 2, 3, 4 
b, 5, 6, 7, 8 
c, 9, 10, 11, 12 

这是我阅读大量的其他变调问题后与上前代码:

length = len(a[0]) 
with open('test.csv', 'w') as test_file: 
    file_writer = csv.writer(test_file) 
    for i in range(length): 
     file_writer.writerow([x[i] for x in a]) 

瓦ICH给我:

a,1,5,9 
b,2,6,10 
c,3,7,11 

所以调换整个列表(更不用提一些值甚至可以输),但如上图所示,我只想要调换的第一行。我只是不知道该把手放在哪里。

感谢Nf4r,我想出了下面的 - 可能看起来笨拙,但工程:-)

a = [['a', 'b', 'c'], [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 
f = open('test.csv', 'a') 
for header, data in zip(a[0], a[1:]): 
    result = "{header}, {data}".format(header = header, 
           data = ', '.join((str(n) for n in data))) 
    f.write(result) 
    f.write('\n') 
f.close() 
+1

欢迎来到StackOverflow。请把你到目前为止尝试过的代码放在一边,因为你没有尝试,所以我已经低估了你的问题。 – DhruvPathak

+0

是的,提供更多的代码。如果你能重组你的数据结构'a',请考虑一下。也许使用一个字典:'{“a”:[1,2,3,4]; “b”:[5,6,7,8] .....'。这将使解决方案变得更容易。 – buhtz

+1

@DhruvPathak +1:他做到了! –

回答

0

你只需要拉头子列表zip其余使用编者合并成单个列表后:

a = [['a', 'b', 'c'], [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 
import csv 

with open('test.csv', 'w') as test_file: 
    file_writer = csv.writer(test_file) 
    it = iter(a) 
    col_1 = next(it) 
    file_writer.writerows([a] + b for a,b in zip(col_1, it)) 
+0

是的!这是我想要做的,但我无法到达那里。感谢您的帮助。 – l3y

0

也许是这样的:

a = [['a', 'b', 'c'], [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 

for header, data in zip(a[0], a[1:]): 
    result = "{header}, {data}".format(header= header, 
             data= ', '.join((str(n) for n in data))) 
    print(result) 
a, 1, 2, 3, 4 
b, 5, 6, 7, 8 
c, 9, 10, 11, 12 
<do what u want with it> 
+0

不客气。 – Nf4r

+0

再次感谢,我不知道如何在这里发布代码,所以我只是把它放在主帖子中。 – l3y