0

我已经为我即将提出的问题工作了一段时间,并试图通过邮件列表和其他在线资源解决它,但最终我的所有努力都没有成功,到目前为止。这就是为什么我要求您宝贵的时间来帮助我完成以下任务:

我正在处理存储为 sqlite 数据库的数据集,该数据库已转换为 csv 文档,以便使用 Python 2.7 更好地处理它。数据以逗号分隔的 csv 格式排列,并报告传感器的命中以及其他信息。它有 8 个不同数据类型的逗号分隔字段,即字符串、整数和浮点数。我只对第二个字段感兴趣,这是记录命中的日期时间以 UNIX 时间戳格式以毫秒为单位存储的位置。不幸的是,传感器的内置时钟无法保持最新​​状态,我只能通过其他方式恢复给定日期的近似校正时间戳。

以下是数据外观的示例:

sensor_ID,timestamp,z,w,k,j,n,human-readable_datetime
651,956684876150254,-0.1692345,0.623286,0.01442572,0.81455,-0.145732,"2000-01-01 00:01:16"
651,956684936161895,0.00526153,0.999893,0.00998516,0.898215,-0.155301,"2000-01-01 00:02:16"
651,956684996173593,0.00526153,0.999893,0.00988516,0.865215,-0.154301,"2000-01-01 00:03:16"
651,956685056185292,0.00526153,0.999893,0.00978676,0.883215,-0.159301,"2000-01-01 00:04:16"
651,956685116196912,0.00526153,0.999893,0.00922469,0.809862,-0.158607,"2000-01-01 00:05:16"

我想要做的是以下内容:

1) 将第 2 列中的每个时间戳与对应于检索到的近似更正时间戳的值进行比较,该时间戳存储在单独的文件中。这意味着:对于第 2 列中的每个时间戳 'x' --> 将其减去正确的时间戳 'y' --> IF abs(yx) > 60 seconds THEN CONTINUE (to step 2) ELSE QUIT

2) 一旦找到一个匹配项并且减法运算输出一个 > 60 秒的值 --> 将给定的固定值(我将称之为“syncing_value”)添加到文件中的所有时间戳,无论是向后还是向前,然后执行只要它们保持一致,即只要时间戳是过时的,就可以这样做。这是因为某些传感器的时钟会停止同步,但会在软件更新后恢复正常工作。

3) 将文件写入输出并退出

为了简单起见,我将附上我使用的伪代码,至于实际代码,我有很多不同的几乎可以工作的替代方案,我不知道该介绍哪一个。我希望你明白。

这是我的伪代码,它缺少我上面提到的一些基本功能:

import csv

for row in data:

    for x in row[1]:

        if x <= y:

            for i in range(x,len(data)-1):

                i = i + syncing_value

        else:

            exit

我真的希望我想要实现的目标对您来说很清楚,并且非常感谢您的帮助。

谢谢!

4

1 回答 1

0
import csv

filename = 'csv.txt'              #csv file to read/write to
timestamp = 956684876150324       #correct timestamp 
syncing_value = 90 

#read contents of csv file into list
data = list(csv.reader(open(filename)))  

#compare second column of every row after header (data[1:]) to correct timestamp
#if any differ more than 60 from correct timestamp, add syncing_value to all timestamps
#in file, and save changes.
if any(abs(int(row[1])-timestamp) > 60 for row in data[1:]):
    for row in data[1:]:
        row[1] = int(row[1]) + syncing_value
    csv_writer = csv.writer(open(filename,'w'))
    csv_writer.writerows(data)
于 2013-04-10T15:21:15.893 回答