Lompang
Lompang

Reputation: 97

Python How To Format CSV File Write

This is an image of my problem: Image of problem

How do I format the brackets out of the CSV file and also how do I seperate the values in the CSV all stuck in the "MODERATE" category in the other columns?

Here is the part of code which involves the CSV writing.

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())

Upvotes: 1

Views: 1389

Answers (3)

Steve
Steve

Reputation: 106

You can use Pandas to do it.

import pandas as pd

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

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

Upvotes: 2

benavente
benavente

Reputation: 1264

If I understand correctly what you are trying to do, try making a list to store the rows and then iterating over the first dict keys and values and appending a list/tuple with the values in each dict for the current key.

Something like this:

rows = []

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

csv_writer.writerows(rows)

Upvotes: 0

Marcin
Marcin

Reputation: 239000

I assume you know who to get lines from your file, and individual columns. Thus, if you have some value from MODERATE column, you could do as follows to "unwrap" the lists:

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.

Hope this helps.

Upvotes: 0

Related Questions