Словарь 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 , но я не могу понять, как это сказать, какие DictWriter .

3 Solutions collect form web for “Словарь Python для CSV”

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

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

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

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

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

 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 
  • Как использовать разделитель для csv в python
  • Проблема с созданием файла CSV
  • Почему csv.DictReader дает мне ошибку атрибута?
  • Flask: загрузите файл csv при нажатии кнопки
  • Ошибка: неподдерживаемый формат или поврежденный файл: ожидаемая запись в BOF
  • Добавление столбца в python CSV и его перечисление
  • Как преобразовать этот список словарей в файл csv?
  • Создание структуры данных в python для использования в шаблоне Jinja2
  • Python - лучший язык программирования в мире.