将列表的确切列保存在 Python 中的 csv 中

Saving the exact columns of list in csv in Python

有这样的列表 "d":

[OrderedDict([('id', '1'),
              ('name', 'Jack'),
              ('email', 'jack@email.com'),
 OrderedDict([('id', '2'),
              ('name', 'Ricky'),
              ('email', 'ricky@email.com')]

我想使用 csv 模块保存输出,但没有 id 行(因此包含列名称、电子邮件及其值)。表演是这样的:

path='/..'
fields=['Name','Email']

with open(path, 'w') as f:   
writer = csv.writer(f)
writer.writerow(fields)
for item in new_d:
    writer.writerow([d[1], d[2]])

所以它把整行保存为一个值。如何更深入地了解列表值的级别并将它们正确保存在 csv 中?

另一种方法是使用 pandas:

In [4]: data = [OrderedDict([('id', '1'),
   ...:               ('name', 'Jack'),
   ...:               ('email', 'jack@email.com')]),
   ...:         OrderedDict([('id', '2'),
   ...:               ('name', 'Ricky'),
   ...:               ('email', 'ricky@email.com')])]
In [5]: df = pd.DataFrame(data)
In [6]: df_ = df.drop('id', axis=1)
In [7]: df_.to_csv('data.csv', header=True, index=False)
In [8]: !head data.csv
name,email
Jack,jack@email.com
Ricky,ricky@email.com

你快到了:

from collections import OrderedDict
import csv

listOfDicts = [OrderedDict([('id', '1'),
              ('name', 'Jack'),
              ('email', 'jack@email.com')]),
              OrderedDict([('id', '2'),
              ('name', 'Ricky'),
              ('email', 'ricky@email.com')])]
path='someFilename.csv'
fields=['Name','Email']

with open(path, 'w', newline="", encoding="utf8") as f:   
    writer = csv.writer(f)
    writer.writerow(fields)
    for d in listOfDicts:  # d are your different dictionaries 
        writer.writerow([d['name'], d['email']])

创建文件:

Name,Email
Jack,jack@email.com
Ricky,ricky@email.com

使用 newline="" open(..) 文件很重要,这样您就不会在其中添加额外的换行符 - csv 将自行处理这些 - 您还应该指定 encoding - 只是为了确定。

我在途中修复了您的示例数据中的其他一些缩进和小括号错误,并提供了所需的导入以获得工作示例。

csv-writer