2014-12-05 84 views
1

这是我的问题的图像: Image of problem的Python如何格式化CSV文件写入

我如何格式化括号出来的CSV文件,并且还我怎么单独的CSV所有卡在值其他列中的“MODERATE”类别?

以下是涉及CSV写入的代码部分。

combinedCSV = dict((k, [modCountNum[k], strCountNum.get(k)]) for k in modCountNum) 
combinedCSV.update((k, [None, strCountNum[k]]) for k in strCountNum if k not in modCountNum) 

combinedCSV2 = dict((k, [combinedCSV[k], majCountNum.get(k)]) for k in combinedCSV) 
combinedCSV2.update((k, [None, majCountNum[k]]) for k in majCountNum if k not in combinedCSV) 

combinedCSV3 = dict((k, [combinedCSV2[k], greCountNum.get(k)]) for k in combinedCSV2) 
combinedCSV3.update((k, [None, greCountNum[k]]) for k in greCountNum if k not in combinedCSV2) 

categoryEQ = ["REGION", "MODERATE", "STRONG", "MAJOR", "GREAT", "OVERALL"] #row setup for CSV file 
csvEarthquakes = csv.writer(open('results.csv', 'w'), lineterminator='\n', delimiter=',') #creating results.csv 
csvEarthquakes.writerow(categoryEQ) 
csvEarthquakes.writerows(combinedCSV3.items()) 

回答

0

我假设你知道从你的文件和单个列中获取行的人。因此,如果你有中度列一定的价值,你可以做如下,以“解包”的名单:

import collections 

from ast import literal_eval 


def flatten(l): 
    for el in l: 
     if isinstance(el, collections.Iterable) and not isinstance(el, str): 
      for sub in flatten(el): 
       yield sub 
     else: 
      yield el 


a_moderate_value = "[[[[1],None],None],None]" 


a_list = literal_eval(a_moderate_value) 

print(a_list) 
# [[[[1], None], None], None] 
# this is python list, i.e. not a string anymore 
# (I assume that all values can be parsed like this) 

print(list(flatten(a_list))) 
#[1, None, None, None] 
# these individual values can be separated to different columns. 

希望这有助于。

0

如果我正确理解你正在尝试做什么,请尝试制作一个列表来存储行,然后迭代第一个字典键和值,并在每个字典中为当前键添加一个列表/元组。

事情是这样的:

rows = [] 

for key, value in first_dict.items(): 
    rows.append([value, second_dict[key], third_dict[key], ...]) 

csv_writer.writerows(rows) 
1

您可以使用Pandas做到这一点。

import pandas as pd 

data = pd.DataFrame({'moderate':modCountNum, 'strong':strCountNum, 
        'major':majCountNum, 'great':greCountNum}) 

data.to_csv('/tmp/results.csv')