【问题标题】:increment timestamps by arbitrary deltatime and couple with data list通过任意 deltatime 增加时间戳并与数据列表结合
【发布时间】:2017-05-13 21:47:52
【问题描述】:

我认为对此有一个简单的答案,但我无法理解它。 基本上我有一个数据列表,它是

的结果
span = 2
datas = a['value'].split(",")
Data_list = [".".join(datas[i:i+span]) for i in range(0, len(datas), span)]

#Where a['value'] is a list

我正在尝试创建一个新列表,将 Data_list 中的第一个结果与时间戳结合起来。然后第二个是Date_time + deltatime,第三个是Date_time + 2* deltatime,等等。

#Where T['value'] is a list
Date_time = datetime.strptime(T['value'], '%d-%m-%Y %H:%M:%S').time()
deltatime = 9e-5

目前我正在使用此代码

#################
DeltaTimeS = 9e-5
#################

Date_time = datetime.strptime(T['value'], '%d-%m-%Y %H:%M:%S').time()
print 'Date_time =',Date_time 

def addSecs(tm, secs):
    fulldate = datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
    fulldate = fulldate + timedelta(seconds=secs)
    return fulldate.time()

#a = datetime.now().time()
a = Date_time
b = addSecs(a, DeltaTimeS)

#for a in Data['result'][:1]:      #only print the first result in the list

span = 2
datas = a['value'].split(",")
Data_list = [".".join(datas[i:i+span]) for i in range(0, len(datas), span)]

for a in Data_list:
    print a,b 

打印出来的

0.02027 14:59:08.000090
0.01549 14:59:08.000090
0.00559 14:59:08.000090
-0.00760 14:59:08.000090
-0.02439 14:59:08.000090 

包含所有数据和时间戳的列表(仅更改一次),而不是每次都增加。任何帮助都会很棒 也许用“len”计算第一个列表的大小,然后将其设为“b”的范围,但我如何让 b 每次都增加?

【问题讨论】:

    标签: python datetime for-loop while-loop increment


    【解决方案1】:

    注意:您提供的代码不能用于重现您收到的输出。因此,我的回答是基于我对您的问题的理解和大量即兴创作的。

    您每次打印的时间戳是b,通过调用addSecs 计算一次。为什么您希望它在您最后一次 for 循环的每次迭代中都有不同的值?

    如果你想提前时间戳,你需要在每次循环迭代时调用addSecs,并相应地调整第二个参数。实现此目的的一种简单方法是使用enumerate 获得循环迭代计数器,并将DeltaTimeS 乘以该计数器:

    from datetime import datetime, timedelta
    
    T = {}
    T['value'] = "29-12-2016 14:59:08"
    a = {}
    a['value'] = "1,2,3,4,5,6,7,8"
    
    DeltaTimeS = 9e-5
    Date_time = datetime.strptime(T['value'], '%d-%m-%Y %H:%M:%S').time()
    
    def addSecs(tm, secs):
        fulldate = datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
        fulldate = fulldate + timedelta(seconds=secs)
        return fulldate.time()
    
    span = 2
    datas = a['value'].split(",")
    Data_list = [".".join(datas[i:i+span]) for i in range(0, len(datas), span)]
    
    for i, x in enumerate(Data_list):
        print x, addSecs(Date_time, i * DeltaTimeS)
    

    结果是:

    1.2 14:59:08
    3.4 14:59:08.000090
    5.6 14:59:08.000180
    7.8 14:59:08.000270
    

    【讨论】:

    • 非常感谢。我并没有那么期待时间不断变化。更多的是我无法弄清楚如何使用 date.time 格式来做到这一点。我正在尝试使用 while 循环和计数,但这并没有让我到达那里。感谢伟大的新工具 - 枚举 - !!!
    【解决方案2】:

    建议你使用enumerate(),类似:

    import datetime as dt
    
    # inputs
    values = [
        0.02027,
        0.01549,
        0.00559,
        -0.00760,
        -0.02439,
    ]    
    start_time = dt.datetime.now()
    
    delta_time_seconds = 9e-5
    format = '%d-%m-%Y %H:%M:%S'
    
    # build a list of data, timestamp tuples    
    list_of_tuples = [(value, (start_time +
                               dt.timedelta(seconds=i*delta_time_seconds)
                               ).strftime(format))
                      for i, value in enumerate(values)]
    
    # show what we got
    for data_point in list_of_tuples:
        print(data_point[0], data_point[1])
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多