2016-07-20 2 views
0

Мне нужно вывести список dicts в python в файл csv. Но я хотел разбить их по имени файла. У меня есть список dicts который выглядит следующим образом:Имейте список dicts нужно написать файл csv в python

{'Filename': 'F:\\Desktop\\Metadata\informationtechnologies1.pdf', 
    'DESCRIPTION': [u'This is a test sentence.'], 
    'NAME': [u'This is a test name'], 
    'PERIOD': [], 
    'INFO2': [u'TEST1', 
    u'TEST2', 
    u'TEST3', 
    u'TEST4', 
    u'TEST5',], 
    'INFO': [u'TEST6', 
    u'TEST7', 
    u'TEST8', 
    u'TEST9', 
    u'TEST10', 
    u'TEST11',]}, 
{'Filename': 'F:\\Desktop\informationtechnologies.pdf', 

Мне нужно напечатать это точно, как это появляется в одном столбце, с результатами, находясь в новой строке. Предпочтительно новая строка после каждого имени файла, чтобы отделить все результаты. Например:

Filename: informationtechnologies1.pdf DESCRIPTION: This is a sentence INFO2: TEST2 TEST3 TEST4 TEST5

Filename:informationtechnologies.pdf

Я попытался следующий код, но он помещает его каждый список в отдельные столбцы (один столбец может иметь список из 20 элементов данных в инфо столбцах):

df = DataFrame.from_dict(results) 
df.to_csv("F:\Desktop/meta.csv",encoding='utf-8') 

мне нужны данные, чтобы быть все итерация в колонке 1, так что если есть список в Словаре Я хочу каждый пункт в этом списке для печати на новой линии

+3

Что вы пробовали? Формат вывода для меня довольно неясен, но он не похож на CSV. Я также не понимаю, что вы подразумеваете под «Я хотел разбить их по имени файла». Просьба уточнить, чего именно вы хотите достичь, и что именно создает трудности для вас. –

+1

Что определяет порядок их написания? Имея в виду, что 'dict' не отсортированы. –

+0

иногда вы печатаете ключи и значения в строке '' Filename: informationtechnologies1.pdf'', в отдельных строках '' ОПИСАНИЕ: 'Это тестовое предложение.' ', Иногда ни одно из двух' 'NAME: This это тестовое имя ». –

ответ

0

Что вы показываете, это не файл csv, а обычный текстовый файл.

Если предположить, что ваши требования:

  • если каталог содержит ключ Filename печать на первой строке ключа, двоеточие, пробел и значение
  • для всех остальных ключ, ценность предметов в каталоге , сначала напечатайте строку с ключом, за которым следует двоеточие, затем, предположив, что это список строк в unicode, напечатайте каждое значение списка, закодированного как utf8 в строке; если значение не является список, преобразовать его в юникод и распечатать его кодируется как utf8
  • печати пустой строки после каждой директории

Я хотел бы использовать явные циклы и тесты, потому что я не знаю ни одного инструмента, делает это из коробки:

with open("F:\\Desktop/meta.csv", "w") as fd: 
    for d in results: 
      if 'Filename' in d: 
       dummy = fd.write('Filename: ' + d['Filename'] + '\n') 
      for k, l in d.iteritems(): 
       if k != 'Filename': 
        dummy = fd.write(k + ':\n') 
        if isinstance(l, list): 
         for item in l: 
          dummy = fd.write(item.encode('utf8') + '\n') 
        else: 
         dummy = fd.write(unicode(l).encode('utf8') + '\n') 
      dummy = fd.write('\n') 
+0

Отлично работает большое спасибо! – staten12