Подтвердить что ты не робот

Словарь 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, хотя он будет печатать a. Я считаю, что это имеет какое-то отношение к неупорядоченному словарю. Мне действительно нужно записать fID и каждый из ключей, связанных с каждым fID (fClassRange ex. "От 5.0 до 5.25" ), а затем значение fArea, связанное с каждым fClassRange, в CSV, но я даже не добрался так далеко мой код, так как я не могу понять, как записать даже fID.

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

4b9b3361

Ответ 1

Писатель по умолчанию ожидает список, поэтому он не будет работать для вас. Чтобы использовать диктофон, просто измените строку listwriter = на это:

listWriter = csv.DictWriter(
   open('/Users/broberts/Desktop/Sum_CSP1_output.csv', 'wb'),
   fieldnames=itemDict[itemDict.keys()[0]].keys(),
   delimiter=',',
   quotechar='|',
   quoting=csv.QUOTE_MINIMAL
)

Или вы можете просто установить fieldnames как fieldnames=['arbitrary','list','of','keys'], если знаете, какие поля должны быть.

Ответ 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

Ответ 3

Для потомков:

Вы должны использовать iteritems() для итерации по словарю, поэтому последняя часть становится

for name, values in itemDict.iteritems():
    print values
    listWriter.writerow(values)

Ответ 4

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

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

Ответ 5

Самый простой способ

Вы можете преобразовать словарь в Dataframe и записать его в CSV Eg

import pandas as pd
my_dict = {"tester": 1, "testers": 2}
df=pd.DataFrame(my_dict,index=[0])
df.to_csv("path and name of your csv.csv")

выход

   tester  testers
0       1        2