簡體   English   中英

如何在python3中將str對象更改為datetime.time?

[英]How to change str object to datetime.time in python3?

首先添加代碼:

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

但是,如果我檢查類型,則“ date”和“ O_all”都是“ datetime.datetime”對象。 我想我遺漏了一些東西或理解不正確。 獲得名為“ Combined_datetime”的時間元組的補救辦法是什么?

用此代碼更新

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)

您可以探索更多使用pythonic編寫代碼的方式。 上面的代碼似乎非常基礎,對此感到抱歉。

問題出在其他地方。 在讀取csv時,我可以使用簡單的if-else構造(空時間被視為空字符串)讀取所有行。 但是在將日期和時間與datetime.combine(d,t) ,它無法處理空字符串。 @amarnath您添加.time()建議.time()幫助。 這次我刪除了排空的行。 實際上,它會覆蓋TypeError: combine() argument 2 must be datetime.time, not str這種方式的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)

暫無
暫無

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

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