2017-04-14 64 views
0

首先添加代碼:如何在python3中將str對象更改爲datetime.time?

import csv 
from datetime import datetime, date, time 

with open('T2.csv') as readcsvfile: 
    readcsv=csv.reader(readcsvfile) 
    header=next(readcsv) 

    data=[] 
    for row in readcsv: 
     # if-else construct to read both empty & time string  
     if row[0]==str(): 
      date=str() 
     else:date=datetime.strptime(row[0],'%y%m%d') 
     # stripping the 170101 part with str(ing)p(arse)time and 
     # changing the style/format into '%Y/%m/%d' format with strftime. 

     ID=str(row[5]) 

     if row[6]==str(): 
      O_all=str() 
     else:O_all=datetime.strptime(row[6],'%H:%M').strftime('%H:%M') 

     Combined_datetime=datetime.combine(date,O_all) 
     data.append([Combined_datetime,ID]) 
    print(data) 

產生了錯誤:

Combined_datetime=datetime.combine(date,O_all) 
TypeError: combine() argument 2 must be datetime.time, not str 

但是如果我檢查類型,既 「日期」 & 「O_all」 是 'datetime.datetime' 的對象。我想我錯過了一些東西或者錯誤地理解了一些東西。獲得名爲'Combined_datetime'的時​​間的補救措施是什麼?

+0

製作是因爲'.strftime( '%H:%M')''中O_all = datetime.strptime(行[6],'%H:%M ').strftime('%H:%M')' – amarnath

+0

@amarnath當我刪除'.strftime('%H:%M')時,錯誤改變爲TypeError:combine()參數2必須是datetime。時間,而不是datetime.datetime'。 – Sourav

回答

0

問題在別處。在閱讀我的csv時,我可以用簡單的if-else構造讀取所有行(空時間被視爲空字符串)。但在將日期&與datetime.combine(d,t)合併時,它無法處理空字符串。 @amarnath你的建議增加.time()雖然幫助。這次我用空的時間刪除了行。實際上它以這種方式覆蓋了TypeError: combine() argument 2 must be datetime.time, not str錯誤。 下面是完整的工作代碼:

#Reading T2 & writing new csv 

import csv 
from datetime import datetime, date, time 

with open('T2.csv') as readcsvfile: 
    readcsv=csv.reader(readcsvfile) 
    header=next(readcsv) 

    data=[] 
    for row in readcsv: 
    #if-else construct to read both empty & time string  
     if row[6]!=str(): 
      d=datetime.strptime(row[0],'%y%m%d') 
      t=datetime.strptime(row[6],'%H:%M').time() 
     print(type(d)) 
    ##stripping the 170101 part with str(ing)p(arse)time and 
    ##changing t from datetime.datetime to datetime.time with `.time()` 
     print(type(t)) 
     ID=str(row[5]) 

     Combined_datetime = datetime.combine(d, t) 
     data.append([Combined_datetime,ID]) 
     print(data) 

with open('T2_w3.csv','w',newline='') as writecsvfile: 
    writecsv=csv.writer(writecsvfile) 
    writecsv.writerow(['Combined_datetime','ID']) 

    for i in range(len(data)): 
     ROW=data[i] 
     CDT=ROW[0] 
     ID=ROW[1] 
     Final_list=[CDT,ID] 
     writecsv.writerow(Final_list) 
0

更新與此代碼

import csv 
from datetime import datetime, date, time 

with open('T2.csv') as readcsvfile: 
    readcsv=csv.reader(readcsvfile) 
    header=next(readcsv) 

    data=[] 
    Combined_datetime = 
    for row in readcsv: 

     if len(row[0])<0: 
      date=str() 
     else: 
      date=datetime.strptime(row[0],'%y%m%d') 

     ID=str(row[5]) 

     if len(row[6])<0: 
      O_all=str() 
     else: 
      O_all=datetime.strptime(row[6],'%H:%M').time() 

     if date and O_all: 
      Combined_datetime = datetime.combine(date, O_all).strftime('%y%m%d %H:%M') 
      data.append([Combined_datetime,ID]) 
     else: 
      data.append(['',ID]) 
    print(data) 

您可以探索編寫代碼更Python的方式。上面的代碼看起來很基礎,很抱歉。

+0

沒有運氣。錯誤是'TypeError:combine()參數2必須是datetime.time,而不是str'。這也是行不通的'O_all = time.strptime(row [6],'%H:%M')',它給出'AttributeError:類型對象'datetime.time'沒有屬性'strptime'' – Sourav

+0

我希望' row [0]','row [6]'的類型是'str' – amarnath

+0

是的,它們來自csv文件,所以默認情況下,csv.reader以字符串的形式讀取一行中的每個對象。然後它被轉換成日期時間對象。一切運行良好,直到我試圖結合'日期'和'O_all'這兩個'datetime.datetime'對象格式。問題是,我不知道如何讓'datetime.time'替代'datetime.datetime'對象。 – Sourav

相關問題