将词典编写为.csv文件,有关数字的问题

kgqe7b3p  于 2022-12-06  发布在  其他
关注(0)|答案(4)|浏览(119)

d = {“A”:85,“B”:70,“C”:40}
我需要将其写为.csv文件,标题为“标题,分数”
我试了两种方法,但都不管用。

方法1:

f= open('score.csv','w')
f.write('Title,Score\n')
a = str(d)
for item in a.strip('{}').split(','):
    item.replace(':',',')
    f.write(item)
f.close()

当我打开score.csv时,我不知道为什么它什么也没有显示。

方法二:

f= open('score.csv','w')
f.write('Title,Score\n')

with open('score.csv','w') as f:
    for title in d.keys():
        f.write('%s,%s\n'%(title,str(d[title]))

方法2无法运行,我猜是因为我无法在文件中写入数字?但我尝试了str,它仍然无法运行。

u2nhd7ah

u2nhd7ah1#

使用Pandas可以在单行中完成任务

pip install pandas

逻辑

import pandas as pd

d = { 'A': 85, 'B':70, 'C':40}

(pd.DataFrame.from_dict(data=d, orient='index')
   .to_csv('dict_con.csv', header=False))

输出csv#

3ks5zfa0

3ks5zfa02#

你的代码的第二次迭代,“方法2”,就是你想要的。它“不运行”的原因是因为这一行:

f.write('%s,%s\n'%(title,str(d[title]))

你得到的错误是“意外的文件结尾”,你的程序文件被列为文件。如果你仔细看,你会发现你有三个左括号,但你只有两个右括号。添加一个括号,它 * 几乎 * 工作完美。仍然有一点阻碍它是这样的:

f= open('score.csv','w')
f.write('Title,Score\n')

你以f的形式打开一个文件,写入数据,然后--不关闭它--以f的形式打开 * 另一个 * 文件,写入新的数据。第一个f文件对象的缓冲区永远不会被写入文件,所以你永远不会得到CSV文件的头文件。
对代码的这些小修改将起到作用:

d = { 'A': 85, 'B':70, 'C':40}

# f= open('score.csv','w')    #don't need this

with open('score.csv','w') as f:
    f.write('Title,Score\n')    #moved from above
    for title in d.keys():
        f.write('%s,%s\n'%(title, d[title]))   #don't need the str()

我忘了:你不需要f.write()中的str()

o7jaxewo

o7jaxewo3#

要编写.CSV文件,请使用csv模块。请确保使用文档中说明的newline=''参数。有关原因,请参阅this answer
对于这个简单的例子来说,这并不重要,但是csv模块也会正确地引用包含列分隔符的字段,并对嵌入的引号进行转义。

import csv

d = {'A': 85, 'B': 70, 'C': 40}

with open('score.csv', 'w', newline='') as fout:
    writer = csv.writer(fout)
    writer.writerow(['title', 'score'])
    for key, value in d.items():
        writer.writerow([key, value])

    # CSV module will properly quote and escape fields as needed
    writer.writerow(['field,with,commas','field"with"quotes'])

score.csv:

title,score
A,85
B,70
C,40
"field,with,commas","field""with""quotes"

Excel表格:

6qqygrtg

6qqygrtg4#

一个过于简单但有效的解决方案:

csv_string = "\n".join(",".join(map(str, pair)) for pair in d.items())
#'A,85\nB,70\nC,40'

然后将csv_string写入文件。

相关问题