Словарь Python для CSV - PullRequest
       5

Словарь Python для CSV

25 голосов
/ 30 ноября 2011

Я написал код для чтения 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, но я не могу понять, как сказать ему, каковы имена полей .

Ответы [ 5 ]

20 голосов
/ 30 ноября 2011

Автор по умолчанию ожидает список, поэтому он не будет работать для вас. Чтобы использовать диктофон, просто измените строку 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'], если знаете, какими должны быть поля.

12 голосов
/ 27 января 2018

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

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
1 голос
/ 29 марта 2017

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

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 голос
/ 14 октября 2015

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

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

for name, values in itemDict.iteritems():
    print values
    listWriter.writerow(values)
0 голосов
/ 13 апреля 2019

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

Вы можете преобразовать словарь в 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")

output

   tester  testers
0       1        2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...