Python 将单个dict数组写入csv文件,该键的值变为一行

Python 将单个dict数组写入csv文件,该键的值变为一行,python,csv,dictionary,Python,Csv,Dictionary,当我运行这段代码时,print语句打印完整的对象,但是csv编写器只将第一部分写入文件。我做错了什么 import csv `testlabels = [{'585abf5d005a8eb3c2d6e2851988cc0c': '586556570100dac0eb73fcb231007126'}, {'585ac054005b72f16d9c6742858707c8': '588b9329004c4d7a5e27eb75b43c4c95'}, {'585ac054005b73207719ba

当我运行这段代码时,print语句打印完整的对象,但是csv编写器只将第一部分写入文件。我做错了什么

import csv

`testlabels = [{'585abf5d005a8eb3c2d6e2851988cc0c': '586556570100dac0eb73fcb231007126'}, {'585ac054005b72f16d9c6742858707c8': '588b9329004c4d7a5e27eb75b43c4c95'}, {'585ac054005b73207719baeda7b97779': '588be66300aba64caf9818cb4e194413'}, {'585ac23f005d7eab58953e03ae2e11e9': '588fe14100743d4472f8e18c474f057c'}, {'585ac23f005d7edd65e8c2bf4439dced': '58952dd60011750508739823983a1e33'}, {'585aca480065fa7ffb9e9b164bf03c82': '586557e201025a1d4818a0f5fe1b3051'}, {'585af09a0097e08d445c31bafc966c90': '585af0e300981a8493a172d6471b9154'}, {'585af1b60098bf1155b231a4d1c407f4': '58c0887600b478187ffbeb1d1db575d3'}, {'585af1b60098bf54b60bcab8c012ec1b': '58c0891900b4e2424cd148a3987bb899'}, {'585af1b60098bf8e26b6b27d44c17e01': '58c08af100b0dba976bab7f6866ca206'}]


resultFile = open("output.txt",'w')
wr = csv.writer(resultFile)

for item in testlabels:
    print(item)
    wr.writerow(item)
我也尝试过:

wr.writerows(testlabels)
标准输出:

> {'585abf5d005a8eb3c2d6e2851988cc0c':  '586556570100dac0eb73fcb231007126'}
>{'585ac054005b72f16d9c6742858707c8':'588b9329004c4d7a5e27eb75b43c4c95'}
> {'585ac054005b73207719baeda7b97779':'588be66300aba64caf9818cb4e194413'}
> {'585ac23f005d7eab58953e03ae2e11e9':'588fe14100743d4472f8e18c474f057c'}
文件中的输出:

> 585abf5d005a8eb3c2d6e2851988cc0c 
> 585ac054005b72f16d9c6742858707c8
> 585ac054005b73207719baeda7b97779 
> 585ac23f005d7eab58953e03ae2e11e9
> 585ac23f005d7edd65e8c2bf4439dced 
> 585aca480065fa7ffb9e9b164bf03c82
> 585af09a0097e08d445c31bafc966c90 
> 585af1b60098bf1155b231a4d1c407f4
> 585af1b60098bf54b60bcab8c012ec1b 
> 585af1b60098bf8e26b6b27d44c17e01
预期产出:

'585abf5d005a8eb3c2d6e2851988cc0c','586556570100dac0eb73fcb231007126'
'585ac054005b72f16d9c6742858707c8','588b9329004c4d7a5e27eb75b43c4c95'
'585ac054005b73207719baeda7b97779','588be66300aba64caf9818cb4e194413'
...

如果将“:”替换为“,”,csv读取器将写入输出。如果不需要“:”,请使用逗号。如果需要“:,”,那么以后可能可以使用字符串操作替换它。不知道更多的细节很难说

import csv
#I changed only the first item from ':' to ','
testlabels = [{'585abf5d005a8eb3c2d6e2851988cc0c', 
'586556570100dac0eb73fcb231007126'}, 
{'585ac054005b72f16d9c6742858707c8': '588b9329004c4d7a5e27eb75b43c4c95'}, 
{'585ac054005b73207719baeda7b97779': '588be66300aba64caf9818cb4e194413'}, 
{'585ac23f005d7eab58953e03ae2e11e9': '588fe14100743d4472f8e18c474f057c'}, 
{'585ac23f005d7edd65e8c2bf4439dced': '58952dd60011750508739823983a1e33'}, 
{'585aca480065fa7ffb9e9b164bf03c82': '586557e201025a1d4818a0f5fe1b3051'}, 
{'585af09a0097e08d445c31bafc966c90': '585af0e300981a8493a172d6471b9154'}, 
{'585af1b60098bf1155b231a4d1c407f4': '58c0887600b478187ffbeb1d1db575d3'}, 
{'585af1b60098bf54b60bcab8c012ec1b': '58c0891900b4e2424cd148a3987bb899'}, 
{'585af1b60098bf8e26b6b27d44c17e01': '58c08af100b0dba976bab7f6866ca206'}]


resultFile = open("output.txt",'w')
wr = csv.writer(resultFile)

for item in testlabels:
    print(item)
    wr.writerow(item)
这给了我输出:

585abf5d005a8eb3c2d6e2851988cc0c,586556570100dac0eb73fcb231007126

585ac054005b72f16d9c6742858707c8

585ac054005b73207719baeda7b97779

585ac23f005d7eab58953e03ae2e11e9

585ac23f005d7edd65e8c2bf4439dced

585aca480065fa7ffb9e9b164bf03c82

585af09a0097e08d445c31bafc966c90

585af1b60098bf1155b231a4d1c407f4

585af1b60098bf54b60bcab8c012ec1b

585af1b60098bf8e26b6b27d44c17e01


如果你不介意使用熊猫,你可以

将熊猫作为pd导入
testlabels=[{'585abf5d005a8eb3c2d6e2851988cc0c':'58655657010DAC0EB73FCB231007126'},
{'585ac054005b72f16d9c6742858707c8':'588b9329004c4d7a5e27eb75b43c4c95',
{'585ac054005b73207719baeda7b97779':'588be66300aba64caf9818cb4e194413',
{'585ac23f005d7eab58953e03ae2e11e9':'588fe14100743d4472f8e18c474f057c',
{'585ac23f005d7edd65e8c2bf4439dced':'58952DD600175050879823983A1E33',
{'585aca480065fa7ffb9e9b164bf03c82':'586557e201025a1d4818a0f5fe1b3051',
{'585af09a0097e08d445c31bafc966c90':'585af0e300981a8493a172d6471b9154',
{'585af1b60098bf1155b231a4d1c407f4':'58c0887600b478187ffbeb1d1db575d3',
{'585af1b60098bf54b60bcab8c012ec1b':'58c0891900b4e2424cd148a3987bb899',
{'585af1b60098bf8e26b6b27d44c17e01':'58c08af100b0dba976bab7f6866ca206']
diz={}
对于测试标签中的t:
diz.更新(t)
pd.系列(diz).至_csv(“output.csv”)
问题:。。。csv编写器仅将第一部分写入文件

testlabel
中的
项属于
dict
类型。但是
csv.writerrow(…
需要序列类型

Python文档


下面的示例使用
label.items()
获取
键、值
对,并使用
*
将其解包,然后将其作为
元组传递给
csv.writerow(…
=>
(*label.items())

import io, csv

with io.StringIO() as outFile:
    wr = csv.writer(outFile)
    for label in testlabels:
        wr.writerow((*label.items()))

    print(outFile.getvalue())
输出

585abf5d005a8eb3c2d6e2851988cc0c,586556570100dac0eb73fcb231007126
585ac054005b72f16d9c6742858707c8,588b9329004c4d7a5e27eb75b43c4c95
585ac054005b73207719baeda7b97779,588be66300aba64caf9818cb4e194413

使用Python 3.6测试

“我做错了什么?”:
testlabels
中的
项属于
dict
类型。但是
csv.writerrow…
需要一个。您必须解压缩它,例如
item=list(item.items())[0]
@stovfl建议的列表方法奏效了!谢谢!这听起来像是另外两个步骤,首先添加逗号,然后用冒号替换。是的,如果你使用这个方法,那么是的。不过这很简单,只要使用string.replace(old,new,count)。如果出于某种原因你真的需要冒号,让我试试这个