使用Python在csv文档上进行循环迭代和算术运算

时间:2013-04-10 13:38:24

标签: python list csv nested-loops

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

我正在处理存储为sqlite数据库的数据集,我将其转换为csv文档,以便使用Python 2.7更好地处理它。 数据以逗号分隔的csv格式排列,并报告传感器的命中以及其他信息。它包含8个不同数据类型的逗号分隔字段,即string,int和float。我只对第二个字段感兴趣,第二个字段是记录命中的日期时间以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(y-x)> 60秒然后继续(到第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

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

谢谢!

1 个答案:

答案 0 :(得分: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)