2017-05-17 34 views
-1

希望有人可能遇到過這種事情之前....我有一個Linux服務器上的csv文件,我需要'按摩'成格式,我可以用作其他產品的查找表。目前的文件格式不適合這種其他產品,所以我希望將數據重新排列成我可以使用的東西。通過第1列和標題行重新排列外部參照/ csv

我已經嘗試過使用bash腳本而沒有太多的成功(主要是性能),但我懷疑,由於我對該語言的掌握非常有限,因此Python將會是更好的選擇。

當前文件我有具有標題行和第一列是即

Date,USD,JPY,BGN,CYP, 
2017-04-28,1.093,121.76,1.9558,26.922, 
2017-04-27,1.0881,121.27,1.9558,26.937, 

日期(這是一個非常簡單的例子!在現實中,有43列和4600行)

我的目標是創造條件,看起來像一個輸出文件...

Date, Currency, FX_Rate 
2017-04-28, USD, 1.093 
2017-04-28, JPY, 121.76 
2017-04-28, BGN, 1.9558 
2017-04-28, CYP, 26.922 
2017-04-27, USD, 1.0881 
2017-04-27, JPY, 121.27 
2017-04-27, BGN, 1.9558 
2017-04-27, CYP, 26.937 

(空間是無關緊要的 - 我只是說他們試圖使它更清晰)

感謝您提供的任何幫助,

馬克。

回答

0

這可以使用Python內置的csv庫來完成。以下內容適用於Python 2.x安裝。

import csv 

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output: 
    csv_input = csv.reader(f_input) 
    csv_output = csv.writer(f_output) 

    header = next(csv_input) 
    csv_output.writerow(["Date", "Currency", "FX_Rate"]) 

    for row in csv_input: 
     date = row[0] 

     for index, currency in enumerate(row[1:], start=1): 
      csv_output.writerow([date, header[index], currency]) 

給你:

Date,Currency,FX_Rate 
2017-04-28,USD,1.093 
2017-04-28,JPY,121.76 
2017-04-28,BGN,1.9558 
2017-04-28,CYP,26.922 
2017-04-27,USD,1.0881 
2017-04-27,JPY,121.27 
2017-04-27,BGN,1.9558 
2017-04-27,CYP,26.937 

如果正在使用的Python 3,您需要更改如下:

with open('input.csv', newline='') as f_input, open('output.csv', 'w', newline='') as f_output:  
相關問題