Словарь Python в CSV

Я написал код для чтения CSV в словарь Python, который отлично работает. Я пытаюсь вернуть словарь в CSV. Я написал следующее:

import csv

itemDict={}

listReader = csv.reader(open('/Users/broberts/Desktop/Sum_CSP1.csv','rU'), delimiter = ',', quotechar='|')

for row in listReader:
    fID = row[0]
    fClassRange = row[1]
    fArea = row[2]

    if itemDict.has_key(fID):
        itemDict[fID][fClassRange]=fArea
    else:
        itemDict[fID] = {'5.0 to 5.25':'','5.25 to 5.5':'','5.5 to 5.75':'','5.75 to 6.0':'','6.0 to 6.25':'','6.25 to 6.5':'','6.5 to 6.75':'','6.75 to 7.0':'','7.0 to 7.25':'','7.25 to 7.5':'','7.5 to 7.75':'','7.75 to 8.0':'','8.0 to 8.25':'',}
        itemDict[fID][fClassRange]=fArea

listWriter = csv.writer(open('/Users/broberts/Desktop/Sum_CSP1_output.csv', 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for a in itemDict:
    print a
    listWriter.writerow(a)

В последнем блоке listWriter ничего не будет записывать в CSV, хотя напечатает. Я считаю, что это как-то связано с неупорядоченностью словаря. Мне действительно нужно записать fID и каждый из ключей, связанных с каждым fID (fClassRange, например, «от 5,0 до 5,25»), а затем значение fArea, связанное с каждым fClassRange в CSV, но я даже не зашел так далеко в мой код, так как я не могу понять, как записать даже fID.

Я попытался использовать DictWriter , но не могу понять, как определить, какие требуются имена полей .

27
задан Mel 29 September 2017 в 07:52
поделиться

2 ответа

Пример данных:

mydict = [{"col1": 1000, "col2": 2000}, {"col1": 3000, "col2": 4000}]

Однострочник для преобразования списка диктов в CSV с использованием панд:

import pandas as pd

pd.DataFrame(mydict).to_csv('out.csv', index=False)

Результаты:

col1,col2
1000,2000
3000,4000
13
ответ дан 28 November 2019 в 05:34
поделиться

Это то, что я использую, это просто и прекрасно работает для меня. когда у вас есть только один словарь, используйте это

my_dict = {"tester": 1, "testers": 2}
with open('mycsvfile.csv', 'wb') as f:  
    w = csv.DictWriter(f, my_dict.keys())
    w.writerow(dict((fn,fn) for fn in my_dict.keys()))
    w.writerow(my_dict)

$ cat mycsvfile.csv
testers,tester
2,1

Когда у вас есть список словарей, например, что вы получаете из запросов SQL, вы делаете это следующим образом.

my_dict = ({"tester": 1, "testers": 2},{"tester": 14, "testers": 28})
with open('mycsvfile.csv', 'wb') as f:  
    w = csv.DictWriter(f, my_dict[0].keys())
    w.writerow(dict((fn,fn) for fn in my_dict[0].keys()))
    w.writerows(my_dict)

cat mycsvfile.csv
testers,tester
2,1
28,14
1
ответ дан 28 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: