这是我第一次发布到这个网站,所以请让我知道如果我错过了什么或做错了什么
我正在写一个小程序来分析一些在工作中的使用数据(我在一个允许学生为私人用途预订教室的教育环境中工作)。 基本上,我想把一个CSV的教师预订,和学生预订到这个脚本,并计算出他们被使用了多少
奇怪的是,我在一个特定的函数上遇到了一个类型错误-
def timeelapsed(time1, time2):
# Function to calculate time elapsed in booking
start_time = datetime.datetime.strptime(time1, '%Y-%m-%d %H:%M:%S')
end_time = datetime.datetime.strptime(time2, '%Y-%m-%d %H:%M:%S')
difference = end_time - start_time
return difference
奇怪的是,我在分析一个没有任何错误的CSV的过程中发现了这个错误,当我运行一个调试器时,函数读取的数据很好(time1='2015-10-08 14:30:00',time2='2015-10-08 15:30:00),所以我有点困惑它为什么这么做
下面是上下文中的代码(很抱歉搞砸了,我还在边走边学习)
import datetime
import csv
def timeelapsed(time1, time2):
# Function to calculate time elapsed in booking
start_time = datetime.datetime.strptime(time1, '%Y-%m-%d %H:%M:%S')
end_time = datetime.datetime.strptime(time2, '%Y-%m-%d %H:%M:%S')
difference = end_time - start_time
return difference
"""
def start_test(time):
# Function to test whether session starts on the hour or on half hour (unused)
time_test = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M:%S")
return time_test.minute
"""
"""
def close_test(end_time, next_time):
# Function to test whether a session starts close enough to the next session to be considered a single session (UNUSED)
gaptime = datetime.timedelta(hours=1)
end_time2 = datetime.datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')
next_time2 = datetime.datetime.strptime(next_time, '%Y-%m-%d %H:%M:%S')
if next_time2 - end_time2 <= gaptime:
return "Yes"
else:
return "No"
"""
def day_of_year(time):
# Function to return day of year
day = datetime.datetime.strptime(time, '%Y.%m.%d')
day_year = day.timetuple().tm_yday
return day_year
def lessonexpand(time1, time2):
# Function to expand time slot if it falls on XX:00
starttime = datetime.datetime.strptime(time1, '%Y-%m-%d %H:%M:%S')
endtime = datetime.datetime.strptime(time2, '%Y-%m-%d %H:%M:%S')
if starttime.minute == 0:
newstarttime = starttime.replace(hour=(starttime.hour - 1), minute=30, second=0, microsecond=0)
if endtime.minute == 0:
newendtime = endtime.replace(minute=30, second=0, microsecond=0)
starttime1 = str(newstarttime)
endtime1 = str(newendtime)
return starttime1, endtime1,
else:
starttime2 = str(newstarttime)
endtime2 = str(endtime)
return starttime2, endtime2
else:
if endtime.minute == 0:
newendtime = endtime.replace(minute=30, second=0, microsecond=0)
starttime3 = str(starttime)
endtime3 = str(newendtime)
return starttime3, endtime3
else:
starttime4 = str(starttime)
endtime4 = str(endtime)
return starttime, endtime
# def day_add(tuple1, tuple2):
# while day_of_year(tuple1) == day_of_year(tuple2):
# length = timeelapsed(*lesson)+
f = open('celcattest2.csv')
csv_f = csv.reader(f)
t = open('celcattest3.csv', "w")
t.close()
for row in csv_f:
testrow1 = lessonexpand(row[0], row[1])
testrow2 = timeelapsed(*testrow1)
dayrow = day_of_year(row[2])
finalrow3 = str(testrow2), dayrow, row[3]
print finalrow3
"""with open("celcattest3.csv", "a") as w:
csv.writer(w).writerow(newrow3)
"""
我可以提供CSV文件,如果你认为错误是在那里,但通过它看所有的行是在正确的格式和工作时,手动输入到函数抛出typeerror
任何建议/帮助都将不胜感激
谢谢你, 克里斯
编辑:抱歉忘记了回溯:
Traceback (most recent call last):
File "C:/Python27/Time Calculator.py", line 75, in <module>
testrow2 = timeelapsed(*testrow1)
File "C:/Python27/Time Calculator.py", line 6, in timeelapsed
start_time = datetime.datetime.strptime(time1, '%Y-%m-%d %H:%M:%S')
TypeError: must be string, not datetime.datetime
以及之前的几份打印件:
('2:00:00', 71, 'G05')
('2:00:00', 106, 'G05')
('2:00:00', 113, 'G05')
('2:00:00', 120, 'G05')
('2:00:00', 127, 'G05')
('2:00:00', 134, 'G05')
('2:00:00', 141, 'G05')
('2:00:00', 148, 'G05')
('2:00:00', 155, 'G05')
我想您应该返回starttime4,endtime4而不是starttime,endtime。因为starttime、endtime是datetime类型,所以当您将它们传递给函数timeelapsed时,会导致TypeError:必须是string,而不是datetime.datetime
相关问题 更多 >
编程相关推荐