使用dictwriter并使用python

时间:2016-09-27 10:05:46

标签: python csv

Output CSv file我目前正在尝试使用python将文件中的数据放入csv文件中。 我的数据如下:

data_list{} = [{'row': '0', 't0': '8.69E-005', 'elems': ' 4 96 187 ', 'Tspan': '5E-006', 'NP': '625','wave0': '123.65 333.56 3333.78 567.89 345678.77 34E-08'}]

我的输出应如下所示:

 row  t0        elems Tspan  NP  wave0
 0    8.69E-005  4    5E-006 625  123.65
                 96               333.56
                 187              3333.78
                                  567.89
                                  345678.77
                                  34E-08

首先是标题,然后是它们下面的值。除了elems和wave0之外,我成功获得了所有标题部分和行部分。

python代码:

 with open('cc.csv','w', newline='') as out_file:
     writer = csv.DictWriter(out_file, fieldnames=data_list[0].keys())
     writer.writeheader()
     for data in data_list:
          writer.writerow(data)

1 个答案:

答案 0 :(得分:0)

看起来你正在追踪data_list变量中的词典。为了得到你想要的输出,你需要做一些工作:

您的一本词典列表:

data_list = [{'row': '0', 't0': '8.69E-005', 'elems': ' 4 96 187 ', 'Tspan': '5E-006', 'NP': '625','wave0': '123.65 333.56 3333.78 567.89 345678.77 34E-08'}]

首先,您需要定义输出列:

output_cols = ['row', 't0', 'elems', 'Tspan', 'NP', 'wave0']

然后,您需要从词典的values创建列表,然后将*zip*所有这些列表一起创建:

# Python2
from itertools import izip_longest
import csv

data = [data_list[0].get(x).strip().split(" ") for x in output_cols]
data = izip_longest(*data)
with open('somefile.csv','w') as outfile:
    file_writer = csv.writer(outfile, delimiter="\t", lineterminator="\n")
    file_writer.writerow(output_cols)
    file_writer.writerows(data)

如果您使用的是python3,则from itertools import izip_longest应替换为from itertools import zip_longest

请注意答案假定您的所有数据都是第一个字典(data_list[0])。如果您的实际列表长于此值,请分享更多数据。

somefile.csv的内容:

row     t0      elems   Tspan   NP      wave0
0     8.69E-005   4     5E-006  625     123.65
                 96                     333.56
                 187                    3333.78
                                        567.89
                                        345678.77
                                        34E-08

我希望这会有所帮助。