Python 将列表打印到CSV

Python 将列表打印到CSV,python,python-3.x,list,csv,output,Python,Python 3.x,List,Csv,Output,我有一份清单: OrderedDict([('user', 'john'), ('password', '7f5a343ca80b8127abb97d5dc5459193'), ('firstname', 'John'), ('valid', 'VALID')]) OrderedDict([('user', 'leila'), ('password', 'c769c2bd15500dd906102d9be97fdceb'), ('firstname', 'Leila'), ('valid', '

我有一份清单:

OrderedDict([('user', 'john'), ('password', '7f5a343ca80b8127abb97d5dc5459193'), ('firstname', 'John'), ('valid', 'VALID')])
OrderedDict([('user', 'leila'), ('password', 'c769c2bd15500dd906102d9be97fdceb'), ('firstname', 'Leila'), ('valid', 'VALID')])
OrderedDict([('user', 'chris'), ('password', '5badcaf789d3d1d09794d8f021f40f0e'), ('firstname', 'Christopher'), ('valid', 'VALID')])
OrderedDict([('user', 'phill'), ('password', '21b72c0b7adc5c7b4a50ffcb90d92dd6'), ('firstname', 'Phill'), ('valid', 'VALID')])
OrderedDict([('user', 'morton'), ('password', '5f4dcc3b5aa765d61d8327deb882cf99'), ('firstname', 'Morton'), ('valid', 'VALID')])
我想把它放在一个.CSV文件中-基本上这个文件是用来存储用户的,我有一个程序,可以添加带有密码/哈希的用户

我目前有:

with open("output2.csv", 'w') as outputFile:
        wr = csv.writer(outputFile, dialect='excel')
        n = 0
        while n < len(dict_list):
            print(dict_list[n])
            wr.writerow(dict_list[n])
            n += 1
    quit()

我确实需要将其作为CSV文件的第一行,但我需要打印每个条目,而不在下方显示标题。

您应该始终使用
pandas
进行数据处理。您可以从(有序的)DICT列表中创建一个数据帧,然后使用pandas的
to_csv
函数将整个内容转储到一个文件中

import pandas as pd
odList = [ordered_dict1, ordered_dict2, ordered_dict3, ordered_dict4, ordered_dict5]

output = pd.DataFrame(odList)
这将输出:

     user                          password    firstname  valid
0    john  7f5a343ca80b8127abb97d5dc5459193         John  VALID
1   leila  c769c2bd15500dd906102d9be97fdceb        Leila  VALID
2   chris  5badcaf789d3d1d09794d8f021f40f0e  Christopher  VALID
3   phill  21b72c0b7adc5c7b4a50ffcb90d92dd6        Phill  VALID
4  morton  5f4dcc3b5aa765d61d8327deb882cf99       Morton  VALID
要将其保存到csv文件,请执行以下操作:

output_path = 'your_file_name.csv'
output.to_csv(output_path)
要从csv中排除索引(左侧的数字),请设置
index=False

output.to_csv(output_path, index=False)

您应该始终使用
pandas
进行数据操作。您可以从(有序的)DICT列表中创建一个数据帧,然后使用pandas的
to_csv
函数将整个内容转储到一个文件中

import pandas as pd
odList = [ordered_dict1, ordered_dict2, ordered_dict3, ordered_dict4, ordered_dict5]

output = pd.DataFrame(odList)
这将输出:

     user                          password    firstname  valid
0    john  7f5a343ca80b8127abb97d5dc5459193         John  VALID
1   leila  c769c2bd15500dd906102d9be97fdceb        Leila  VALID
2   chris  5badcaf789d3d1d09794d8f021f40f0e  Christopher  VALID
3   phill  21b72c0b7adc5c7b4a50ffcb90d92dd6        Phill  VALID
4  morton  5f4dcc3b5aa765d61d8327deb882cf99       Morton  VALID
要将其保存到csv文件,请执行以下操作:

output_path = 'your_file_name.csv'
output.to_csv(output_path)
要从csv中排除索引(左侧的数字),请设置
index=False

output.to_csv(output_path, index=False)

您应该使用
csv.writer
而不是
csv.writer

DictWriter
writerow
接受dict,而
writer.writerow

需要一个iterable,因此当您传递一个
dict
时,它会写入它的键而不是值

编辑:

为了使用
dict
的键写入标题,您应该在写入行之前添加以下行:

wr.writeheader()
此外,还有
writerows
方法,它采用
dict
s的整个列表 并将其写入文件。
因此,总而言之,您的代码应该如下所示:

with open("output2.csv", 'w') as outputFile:
    wr = csv.DictWriter(outputFile, fieldnames=dict_list[0].keys(), dialect='excel')
    wr.writeheader()
    wr.writerows(dict_list)

您应该使用
csv.writer
而不是
csv.writer

DictWriter
writerow
接受dict,而
writer.writerow

需要一个iterable,因此当您传递一个
dict
时,它会写入它的键而不是值

编辑:

为了使用
dict
的键写入标题,您应该在写入行之前添加以下行:

wr.writeheader()
此外,还有
writerows
方法,它采用
dict
s的整个列表 并将其写入文件。
因此,总而言之,您的代码应该如下所示:

with open("output2.csv", 'w') as outputFile:
    wr = csv.DictWriter(outputFile, fieldnames=dict_list[0].keys(), dialect='excel')
    wr.writeheader()
    wr.writerows(dict_list)
因为

dict_list[n]
这是你订购的照片之一

然后

将迭代您的有序字典

不过,这将是一个密钥列表

您可能更想要的:

wr.writerow([dict_list[n][x] for x in dict_list[n]])
它获取字典中每个键的值。

因为

dict_list[n]
这是你订购的照片之一

然后

将迭代您的有序字典

不过,这将是一个密钥列表

您可能更想要的:

wr.writerow([dict_list[n][x] for x in dict_list[n]])

它获取字典中每个键的值。

可能重复的可能重复的可能重复的这与此无关吗?这正是OP想要做的。这无关紧要,因为你绝对不需要熊猫来解决这个问题。在一个巨大的库上添加依赖性,使其仅使用一个单面功能,而不需要传递dict的值而不是dict本身(或使用csv.DictWriter)就可以轻松解决问题,这违背了所有良好的实践。显然,它可以做到这一点,并且是此任务的一个很好的替代方案。到目前为止,pandas是否为OP引入了另一个主要依赖项尚不清楚,这与我们的业务无关。确切地说,
csv
作为一个软件包非常好,但对于任何类型的动态操作或分析
pandas
都具有极大的优越性和灵活性。OP至少应该知道这个选项。“我真的不明白这种激烈的反应。”布鲁诺德斯图利埃没有人说这是最好的答案。你是对的,你不需要熊猫来解决问题,这是无关紧要的。这绝不是提交答案的目的,或者每个问题只允许一个答案。否决这是疯狂的,这是一个完美的解决方案。熊猫是一种非常受欢迎的动物,很多人已经有了它。如果他们没有,他们可以得到它,如果没有,看到另一个答案+1.不过,说“总是”使用熊猫有点强。这怎么不相关呢?这正是OP想要做的。这无关紧要,因为你绝对不需要熊猫来解决这个问题。在一个巨大的库上添加依赖性,使其仅使用一个单面功能,而不需要传递dict的值而不是dict本身(或使用csv.DictWriter)就可以轻松解决问题,这违背了所有良好的实践。显然,它可以做到这一点,并且是此任务的一个很好的替代方案。到目前为止,pandas是否为OP引入了另一个主要依赖项尚不清楚,这与我们的业务无关。确切地说,
csv
作为一个软件包非常好,但对于任何类型的动态操作或分析
pandas
都具有极大的优越性和灵活性。OP至少应该知道这个选项。“我真的不明白这种激烈的反应。”布鲁诺德斯图利埃没有人说这是最好的答案。你是对的,你不需要熊猫来解决问题,这是无关紧要的。这绝不是提交答案的目的,或者每个问题只允许一个答案。否决这是疯狂的,这是一个完美的解决方案。熊猫是一种非常受欢迎的动物,很多人已经有了它。如果他们没有,他们可以得到它,如果没有,看到另一个答案+1.不过,使用pandas时说“总是”有点强。这会引发一个错误-DictWriter需要参数fieldnames,例如:wr=csv.DictWriter(outputFile,fieldnames=['user','valid','firstname','password'],dial='excel')@michetonu,谢谢!我没有注意到
fieldnames
不是可选参数。这将引发一个错误–DictWriter需要参数fieldnames,例如:wr=csv.DictWriter(outputFile,fieldnames=['user','valid','f