簡體   English   中英

Python-for循環以CSV格式跨行編寫

[英]Python - for loop to write across a row in CSV

基本上,我有一些代碼要求用戶輸入以逗號分隔的貨幣列表和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的初學者,如果這很簡單,請您道歉。 任何幫助將不勝感激。

謝謝。

您正在用新行寫每種貨幣的匯率,因為在內部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)

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

好。 輸出就是您實際編程的輸出。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM