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

使用Python对csv文档进行循环迭代和算术运算,python,list,csv,nested-loops,Python,List,Csv,Nested Loops,我已经为我即将提出的问题工作了一段时间,并试图通过邮件列表和其他在线资源来解决这个问题,但到目前为止,我所有的努力都没有成功。这就是为什么我请求您宝贵的时间来帮助我完成以下任务: 我正在处理一个存储为sqlite数据库的数据集,并将其转换为csv文档,以便使用Python2.7更好地处理它。 数据以逗号分隔的csv格式排列,并报告传感器的点击数以及其他信息。它包含8个逗号分隔的不同数据类型字段,即字符串、int和float。我只对第二个字段感兴趣,它是记录的命中的日期时间以UNIX时间戳格式存储

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

我正在处理一个存储为sqlite数据库的数据集,并将其转换为csv文档,以便使用Python2.7更好地处理它。 数据以逗号分隔的csv格式排列,并报告传感器的点击数以及其他信息。它包含8个逗号分隔的不同数据类型字段,即字符串、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”-->如果abs(y-x)>60秒,则继续(到步骤2),否则退出

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

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
导入csv
对于数据中的行:
对于第[1]行中的x:

如果x thanky you@mtadd,您的代码运行良好。显然,构建嵌套循环的语法是错误的。现在,如果在同一个数据库中,在某个点上,处理的时间戳实际上已经同步了呢?不幸的是,我知道有一些情况会发生这种情况。我刚刚注意到您的数据库在sqlite中。python有很好的库,可以直接与sqlite数据库接口,在SQL中执行这种逻辑可能比在平面文件(csv)中使用python更舒服格式。我最终必须将sqlite数据库转换为csv,以便能够运行一些R脚本,这就是为什么我认为在同步之前进行转换会做得很好,但我还是按照您的建议,研究python对sqlite的支持。干杯
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)