Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python3中将str对象更改为datetime.time?_Python_Python 3.x_Datetime - Fatal编程技术网

如何在python3中将str对象更改为datetime.time?

如何在python3中将str对象更改为datetime.time?,python,python-3.x,datetime,Python,Python 3.x,Datetime,首先添加代码: 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 & t

首先添加代码:

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)
导入csv
从日期时间导入日期时间、日期、时间
将open('T2.csv')作为readcsvfile:
readcsv=csv.reader(readcsvfile)
header=next(readcsv)
数据=[]
合并日期时间=
对于readcsv中的行:

如果len(行[0])问题在别处。在读取csv时,我可以使用简单的if-else构造读取所有行(空时间被视为空字符串)。但是,当将日期和时间与
datetime.combine(d,t)
组合时,它无法处理空字符串。 @amarnath您关于添加
.time()
的建议很有帮助。这次我删除了空时间的行。实际上,它以这种方式重写了
TypeError:combine()参数2必须是datetime.time,而不是str
error。 以下是完整的工作代码:

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

由于
O_all=datetime.strtime(第[6]行,'%H:%M').strftime('%H:%M').strftime('%H:%M')中的
.strftime('%H:%M')
当我删除
.strftime('%H:%M')
时,错误变为
类型错误:combine()参数2必须是datetime.time,而不是datetime.datetime
。运气不好。错误再次是
TypeError:combine()参数2必须是datetime.time,而不是str
。“O_all=time.strtime(第[6]行,'%H:%M')”也不起作用,它给出了
AttributeError:type对象“datetime.time”没有属性“strtime”
我希望
row[0]
row[6]
是的,它们来自csv文件,因此默认情况下,csv.reader将一行中的每个对象读取为字符串。然后将其转换为datetime对象。一切正常,直到我尝试组合“date”和“O_all”,它们都是“datetime.datetime”对象格式。问题是,我不知道如何获取“datetime.time”而不是“datetime.datetime”对象。根据python3,第一个和第二个参数分别是
date
time
datetime.strtime(行[6],“%H:%M”).time()
负责生成
datetime.time
对象。因此,更新后的代码应该可以工作。