2014-07-09 46 views
0

我有一個很大的.csv文件,其中存儲的數據來自某些記錄。其中一個領域有錄製的時間,我需要做一個轉換,以便以後與他們合作。Python - 通過.csv列在循環中進行時間轉換

*Col 0, hh:mm:ss, col 2, col 3,...* 

我知道如何使用單個值進行時間轉換,它具有單個值。這工作,

import decimal 
from datetime import datetime 

time = "14:55:36.629" 
(hour,min,sec) = time.split(':') 
result = int(hour) * 3600 + int(min) * 60 + float(sec) 
decimal.Decimal(result) 

但我無法將其插入一個循環

with open('input.csv', 'r') as inf, open('output.csv','wb') as outf: 
    for row in inf: 
     t = row[1] 
     (h,m,s) = row[1].split(':') # Error here 
     result = int(h) * 3600 + int(m) * 60 + float(s) 
     decimal.Decimal(result) 
    outcsv = csv.writer(outf, delimiter=',') 

我卡與轉換,但在同一時間,我不知道以後是否我d能夠將信息寫入其他文件。我如何將所有值轉換並解析爲列?

對於我來說,寫下原始文件而不是打開另一個文件並在其中寫入信息也可以。

+2

您不是以CSV格式讀取文件 - 「行[1]」是*單個字符*。 – jonrsharpe

回答

1

該解決方案在不同的文件中寫入輸出。如果你想在同一個文件上寫,你需要加載和處理輸入文件作爲行列表,然後寫入同一個文件。

import csv 
with open('input.csv', 'r') as inf, open('output.csv','wb') as outf: 
    reader = csv.reader(inf, delimiter=',') 
    writer = csv.writer(outf, delimiter=',') 
    for row in reader: 
     t = row 
     (h,m,s) = t[1].split(':') 
     result = int(h) * 3600 + int(m) * 60 + float(s) 
     t[1] = result 
     writer.writerow(t) 
+0

感謝您的回答,但在轉換後,我應該如何將它寫入列表中?我設法寫出最初的信息,但不是在操作之後。 –

+0

我編輯了答案 – TommasoF

+0

謝謝,它現在完美的工作 –

2

您需要實際讀取輸入文件as CSV。比較和對比用一些虛擬的數據:

>>> demo = ['id,time,data', '1,14:17:33,7', '2,14:17:34,10'] 

遍歷 「文件」 直接:

>>> for row in demo: 
    row[1] 


'd' 
',' 
',' 

遍歷它讀成CSV:

>>> import csv 
>>> for row in csv.reader(demo): 
    row[1] 


'time' 
'14:17:33' 
'14:17:34' 

或者,讓你的代碼更清晰(假設你有一個標題行):

>>> for row in csv.DictReader(demo): 
    row['time'] 


'14:17:33' 
'14:17:34'