Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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
Python 使用timedelta比较时间时避免类型错误_Python_Datetime_Timedelta - Fatal编程技术网

Python 使用timedelta比较时间时避免类型错误

Python 使用timedelta比较时间时避免类型错误,python,datetime,timedelta,Python,Datetime,Timedelta,我有一个嵌套列表,其中包含时间和一些相应的信息,并试图从一个时间块的开头提取一行,这些时间块彼此紧随其后一秒(例如10:04:23,10:04:24,10:04:25..)。应该有很多这样的小街区。我不确定我所拥有的是否在正确的行上,如果在正确的行上,它会引发一个类型错误,我不确定如何避免它 这是有关动物访问某一区域的数据,每秒都会进行记录。我的目标是每次访问只进行一次记录,因此,从《时代周刊》的后续文章中选出第一行 上一个_和下一个_从 aftersecond正在引发类型错误:无法将'date

我有一个嵌套列表,其中包含时间和一些相应的信息,并试图从一个时间块的开头提取一行,这些时间块彼此紧随其后一秒(例如10:04:23,10:04:24,10:04:25..)。应该有很多这样的小街区。我不确定我所拥有的是否在正确的行上,如果在正确的行上,它会引发一个类型错误,我不确定如何避免它

这是有关动物访问某一区域的数据,每秒都会进行记录。我的目标是每次访问只进行一次记录,因此,从《时代周刊》的后续文章中选出第一行

上一个_和下一个_从

aftersecond正在引发
类型错误:无法将'datetime.timedelta'对象隐式转换为str
,我理解,但不理解如何避免。我甚至不确定这段代码是否符合我的要求

谢谢你的帮助

dateTimes = []
for d in data:
    try:
        f=datetime.datetime.strptime(d[1],'%H:%M:%S')
        g=f.strftime('%H:%M:%S')
        d.append(g)
        dateTimes.append(f) #append datetime object
        #you could also append f to the end of d ... 
    except:
        pass

new_list=[]
for i,prev,item,next in enumerate(previous_and_next(data)):
    aftersecond=dateTimes[i]+datetime.timedelta(seconds=1)
    if next[1]==aftersecond: #if next time is this time plus a second
        this=True
    else:
        this==False
    while this==True:
        continue
    else:
        new_list.append(data)    
可能有用


可能有用…

我建议使用这个看似简单但可能过于简单的解决方案:

import datetime

from pprint import pprint

data=[['07/11/2012', '09:53:36', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:36'],
      ['07/11/2012', '09:53:37', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:37'],
      ['07/11/2012', '09:53:38', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:38'],
      ['05/13/2012', '09:54:27', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:27'],
      ['05/13/2012', '09:54:28', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:28'],
      ['05/13/2012', '09:54:29', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:29']]

#convert times to datetime objects
for d in data:
    dt = ' '.join( d[0:2] )
    dt = datetime.datetime.strptime(dt,'%m/%d/%Y %H:%M:%S')
    d.append( dt )

newdata = [ data[0] ]
latest_time = newdata[-1][-1]
for d in data[1:]:
    delta = d[-1] - latest_time
    latest_time = d[-1]
    if delta != datetime.timedelta(0, 1):
        newdata.append( d )

pprint(newdata)
使用该虚拟数据,假设有两次动物访视,每次观察三次,结果将为:

[['07/11/2012',
  '09:53:36',
  'U',
  '#0F',
  '0006E7895B',
  'T',
  'U\n',
  '09:53:36',
  datetime.datetime(2012, 7, 11, 9, 53, 36)],
 ['05/13/2012',
  '09:54:27',
  'U',
  '#0F',
  '0006E3DADA',
  'T',
  'U\n',
  '5031',
  '09:54:27',
  datetime.datetime(2012, 5, 13, 9, 54, 27)]]

我建议的解决方案看似简单,但可能过于简单:

import datetime

from pprint import pprint

data=[['07/11/2012', '09:53:36', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:36'],
      ['07/11/2012', '09:53:37', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:37'],
      ['07/11/2012', '09:53:38', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:38'],
      ['05/13/2012', '09:54:27', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:27'],
      ['05/13/2012', '09:54:28', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:28'],
      ['05/13/2012', '09:54:29', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:29']]

#convert times to datetime objects
for d in data:
    dt = ' '.join( d[0:2] )
    dt = datetime.datetime.strptime(dt,'%m/%d/%Y %H:%M:%S')
    d.append( dt )

newdata = [ data[0] ]
latest_time = newdata[-1][-1]
for d in data[1:]:
    delta = d[-1] - latest_time
    latest_time = d[-1]
    if delta != datetime.timedelta(0, 1):
        newdata.append( d )

pprint(newdata)
使用该虚拟数据,假设有两次动物访视,每次观察三次,结果将为:

[['07/11/2012',
  '09:53:36',
  'U',
  '#0F',
  '0006E7895B',
  'T',
  'U\n',
  '09:53:36',
  datetime.datetime(2012, 7, 11, 9, 53, 36)],
 ['05/13/2012',
  '09:54:27',
  'U',
  '#0F',
  '0006E3DADA',
  'T',
  'U\n',
  '5031',
  '09:54:27',
  datetime.datetime(2012, 5, 13, 9, 54, 27)]]

d[1]是一个字符串。。。我想您需要
aftersecond=item[-1]+datetime.timedelta(seconds=1)
。。。实际上,d[-1]也将是一个字符串…d[1]是一个字符串。。。我想您需要
aftersecond=item[-1]+datetime.timedelta(seconds=1)
。。。实际上,d[-1]也将是一个字符串……我认为这会附加错误的东西——数据与日期时间无关。这当然是一个开始,不过,我会测试它:)与枚举它应该。。。我不确定前一个函数是什么…我认为这会附加错误的东西-数据与日期时间无关。这当然是一个开始,不过,我会测试它:)与枚举它应该。。。我不确定上一个功能是什么,但是。。。