Python: csvwriter的问题

2 投票
2 回答
2252 浏览
提问于 2025-04-16 06:23

我正在尝试把一些数据(主要是日期、布尔值和浮点数)写入一个CSV文件格式。以下是我代码的一部分:

# Write data to file
with open(OUTPUT_DIR + output_filename,'w') as outputfile:
    wrtr = csv.writer(outputfile, delimiter=',', quotechar='"')

    for x, y in datarows.items():
        a,b,c,d,e,f,g = (somedate.strft('%Y-%m-%d'),0,6058.7,False,1913736200,0,False)                     
        rowstr = "{0},{1},{2},{3},{4},{5},{6}".format(a,b,c,d,e,f,g)
        wrtr.writerow(rowstr)

    outputfile.close()

文件内容看起来像这样:

2,0,0,7,-,10,-,03,",",0,",",6,0,5,8,.,7,",",F,a,l,s,e,",",1,9,1,3,7,3,6,2,0,0,",",0,",",F,a,l,s,e

我现在是用原始文件对象来写入文件,但我更想用csvwrite,因为那是它应该用来做的事情。

2 个回答

5

试试用 wrtr.writerow([a,b,c,d,e,f,g]) 这个方式。

writerow() 的参数必须是一个值的列表,而不是一行文本。csv.writer 的作用就是按照CSV的规则来格式化每一行的值。

你得到的结果是因为 writerow() 把你的 rowstr 字符串当成了一个字符列表来处理。

3

看看这个例子,也许能对你有帮助:

import datetime

with open('file.csv','w') as outputfile:
    wrtr = csv.writer(outputfile, delimiter=',', quotechar='"')
    a = (datetime.datetime.now().strftime('%Y-%m-%d'),0,6058.7,False,1913736200,0,False)
    wrtr.writerow(a)  # pass an iterable here

    # outputfile.close() you don't have to call close() because you use with

file.csv

2010-11-01,0,6058.7,False,1913736200,0,False

希望这能帮到你

撰写回答