Python for loop在CSV中跨行写入

2024-06-15 09:11:01 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我有一些代码要求用户输入一个逗号分隔的货币列表和2个日期。我想取这些货币,并按以下格式将其写入CSV文件:

Date, Curr1, Curr2, Curr3, ... , Currn
---, x, x, x, ..., n
---, x, x, x, ..., n

其中x是给定日期货币的汇率。 我试过用csv.writer像这样:

^{pr2}$

但它不会以我想要的方式写入文件,而是如下所示:

Date,['RSD', 'GBP']
2008-04-11,51.586749
2008-04-11,0.506908
2008-04-12,51.586749
2008-04-12,0.506674

把每种货币的价值放在一个新的行上,而我希望它像:

Date,RSD,GBP
2008-04-11,51.586749,0.506908
2008-04-12,51.586749,0.506674

我是Python的初学者,如果这是微不足道的,请道歉。任何帮助都将不胜感激。在

谢谢。在


Tags: 文件csv代码用户列表date格式货币
3条回答

嗯。输出只是,你实际编程的结果。在

使用writer.writerow()您应该只写一个数据列表。试试这个:

writer = ex.csv.writer(f, delimiter=',')
writer.writerow(['Date'] + codes) # codes seems to be a list, so just append it
for i in range(delta.days + 1):
    date = real_date + ex.timedelta(days=i)
    rates = exchrates(date)
    writer.writerow([date] + [rates[j.upper()] for j in codes]) # only one line

您在一个新行中写入每种货币的汇率,因为在内部的for循环中,您要遍历codes的列表,并对每个代码执行写操作。 而不是

for j in codes:
    writer.writerow([date, rates[j.upper()]])

你应该这样做:

^{pr2}$

writerow只写了一整行。您需要使用codes构建行,并进行一个调用。在

for i in range(delta.days + 1):
    date = real_date + ex.timedelta(days=i)
    rates = exchrates(date) #function fetches all rates on given date, returns dict
    writer.writerow([date] + [rates[j.upper()] for j in codes])

相关问题 更多 >