【问题标题】:Python - for loop to write across a row in CSVPython - for 循环在 CSV 中写入一行
【发布时间】:2015-05-02 16:03:48
【问题描述】:

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

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

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

    writer = ex.csv.writer(f, delimiter=',')
    writer.writerow(['Date', 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
        for j in codes:
            writer.writerow([date, rates[j.upper()]])

但它不会像我想要的那样写入文件,而是这样:

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 的初学者,如果这是微不足道的,我深表歉意。任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: python csv for-loop


    【解决方案1】:

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

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

    你应该这样做:

    new_row = [date]
    for j in codes:
        new_row.append(rates[j.upper()])
    writer.writerow(new_row)
    

    【讨论】:

      【解决方案2】:

      嗯。输出就是你实际编程的样子。

      使用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
      

      【讨论】:

      • 这更有意义,而且效果很好。非常感谢!
      【解决方案3】:

      writerow 写的是:整行。您需要使用 codes 构建行并进行 one 调用。

      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])
      

      【讨论】:

        猜你喜欢
        • 2017-11-30
        • 2016-09-30
        • 2015-08-12
        • 2013-08-28
        • 2018-01-12
        • 2018-03-14
        • 1970-01-01
        • 2018-01-19
        • 2019-07-20
        相关资源
        最近更新 更多