有一个dicts列表需要在python中编写csv文件

时间:2016-07-20 15:26:26

标签: python python-2.7 csv dictionary

我需要将python中的dicts列表输出到csv文件中。但我想用文件名分割它们。我有一个如下所示的词典列表:

{'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列中对所有数据进行迭代,因此如果dict中有列表,我希望该列表中的每个项目都在新行上打印

1 个答案:

答案 0 :(得分:0)

您展示的不是csv文件,而是纯文本文件。

假设您的要求是:

  • 如果目录中包含键Filename,则在第一行打印键,冒号,空格和值
  • 对于目录中的所有其他键值项,首先使用键后跟冒号打印一行,然后假设该值是unicode字符串列表,打印在一行上编码为utf8的列表的每个值;如果该值不是列表,则将其转换为unicode并将其编码为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')