2017-08-06 242 views
2

我试图找到像我想要的一样的问题,我没弄明白。我尝试学习列表的Python字典并将其转换为CSV文件。 Tha案就是这样。我试图为一个键创建一个头,我试图创建一个数据作为值。使用Python将列表字典转换为CSV文件

header_column = ["id", "data"] 
text = ["1, first", "2, second", "3, thrid"] 
for k in header_column: 
    a = {k:text} 
    insert = open('sample.csv', 'wb') 
    insert.write(str(a)) 

在CSV,我要像:

id data 
1 First 
2 Second 
3 Thrid 

回答

2

为什么你想使用字典?您可以使用csv模块并直接编写这些列表。

import csv 

header_column = ["id", "data"] 
text = ["1, first", "2, second", "3, third"] 

with open('sample.tsv', 'wb') as f: 
    writer = csv.writer(f, delimiter='\t') 
    writer.writerow(header_column) 
    for l in text: 
     writer.writerow(l.split(', ')) 

可正常工作,给

id data 
1 first 
2 second 
3 third 

待办事项为Excel明白,你的代码是制表符分隔,您需要将其保存为.tsv文件。

+0

你怎么总是能够如此快地得到答案?就像我开始打字一样,你的打字将会完成:p –

+0

@JoeIddon哈哈对不起。我很擅长触摸打字我猜:p –

+0

我尝试了你的代码,但是当我使用.csv文件时,结果并不是我想要的,但是当我用.tsv文件更改时,它正在工作/但是,为什么.tsv文件?它不能为.csv文件工作? –

-1

导入numpy的只是pip -install numpy

import numpy 
a = numpy.asarray([ [1,first], [2,second], [3,third] ]) 
numpy.savetxt("sample.csv", a, delimiter=",") 
1

这是更有效的通过列表迭代,写每一行一行接一行。这可以防止您的字典的创建,从列表的大小加倍内存需求。

我选择不使用csv模块,只是直接写入文件,因为您正在写入文件的值已经被解析为字符串(除了需要作为字符串连接的头文件) 。

header_column = ... 
text = ... 
with open('sample.csv', 'wb') as f: 
    f.write(", ".join(header_column) + '\n') 
    for row in text: 
     f.write(row + '\n') 
+0

嘿,这很好。但是,头部数据没有显示,并且循环非常多,几乎每个数据都有双倍的数据。 –

+0

适用于我的样本数据。 – Alexander

+0

哦,我的上帝,对不起,真正的文本变量是文本= [“1”,“第一”,“2”,“第二”,“3”,“第三”“]。这个符号(')是否有效? –

0

我是一个简单的灵魂。没有内在的需要使用先进的技术。

>>> header_column = ["id", "data"] 
>>> text = ["1, first", "2, second", "3, thrid"] 
>>> with open('sample.csv', 'w') as sample: 
...  n = sample.write(' '.join(header_column)+'\n') 
...  for item in text: 
...   n = sample.write(item.replace(',', '')+'\n') 

编辑:对评论的回应有轻微改变的代码。在第二个写入语句中注意额外的.replace("'", '')

>>> with open('sample.csv', 'w') as sample: 
...  n = sample.write(' '.join(header_column)+'\n') 
...  for item in text: 
...   n = sample.write(item.replace(',', '').replace("'", '')+'\n') 
+0

我试过你的代码,但结果不像我想要的,因为结果是文本varibale它应该被分成两列,id和数据。但全部文本变量只显示在1列中。 –

+0

用问题中提供的数据为我工作。 –

+0

噢,我的上帝,对不起,真正的文本变量是文本= [“1”,“第一”,“2”,“第二”,“3,'第三'”]。这个符号(')是否有效? –