在两个CSV文件之间比较日期时间对象时出现问题循环

时间:2018-12-12 16:01:40

标签: python python-2.7 csv

我有两个csv文件,其中第一列是时间戳。我最终希望获得每行两次的差值。

import csv
import datetime

with open('file1.csv', 'rb')as csvfile:            
    filereader = csv.reader(csvfile, delimiter=',')                             
    for headers in range(2):                                                    
        next(filereader, None)                                                  
    for column in filereader:                                                   
        date = column[0]                                                        
        parsed_date = datetime.strptime(date, '%H:%M:%S')

with open('file2.csv', 'rb')as csvfile:            
    filereader2 = csv.reader(csvfile, delimiter=',')                             
    for headers in range(2):                                                    
        next(filereader2, None)                                                  
    for column2 in filereader:                                                   
        date2 = column2[0]                                                        
        parsed_date = datetime.strptime(date, '%H:%M:%S')
        time_delta = (parsed_date - parsed_date2)

现在,我的代码仅使用parsed_date的第一个实例,因为我已将其从循环中取出。如何获得所有值?我试过在for循环中读取第二个csv文件,但随后程序冻结(我认为是因为它循环不断)。

3 个答案:

答案 0 :(得分:1)

我建议同时读取两个csv文件并保存适用的数据。然后将两者压缩在一起,然后对每个元组执行不同的压缩操作

答案 1 :(得分:1)

关于代码的注释很少。

import csv
import datetime

with open('file1.csv', 'rb')as csvfile:            
    filereader = csv.reader(csvfile, delimiter=',')                             
    for headers in range(2):                                                    
        next(filereader, None)                                                  
    for column in filereader:                                                   
        date = column[0]                                                        
        parsed_date = datetime.strptime(date, '%H:%M:%S') #this var will be recreated on each loop iteration

with open('file2.csv', 'rb')as csvfile:            
    filereader2 = csv.reader(csvfile, delimiter=',')                             
    for headers in range(2):                                                    
        next(filereader2, None)                                                  
    for column2 in filereader:                                                   
        date2 = column2[0]                                                        
        parsed_date = datetime.strptime(date, '%H:%M:%S')
        time_delta = (parsed_date - parsed_date2) # parsed_date2 - doesn't exist as was never created, time_delta is lost on each iteration

这意味着您一直在丢失要使用的数据。为了解决您的问题,请先读取文件,然后再读取数据:

import csv
import datetime

first_file_dates = []
second_file_dates = []

with open('file1.csv', 'rb')as csvfile:            
    filereader = csv.reader(csvfile, delimiter=',')                             
    for headers in range(2):                                                    
        next(filereader, None)                                                  
    for column in filereader:                                                   
        first_file_dates.append(datetime.strptime(column[0], '%H:%M:%S'))


with open('file2.csv', 'rb')as csvfile:            
    filereader2 = csv.reader(csvfile, delimiter=',')                             
    for headers in range(2):                                                    
        next(filereader2, None)                                                  
    for column in filereader:                                                   
        second_file_dates.append(datetime.strptime(column[0], '%H:%M:%S'))

for k,v in zip(first_file_dates, second_file_dates):
    print(k-v)

请注意,压缩会将对象的长度缩短为最短的数组。

答案 2 :(得分:0)

这可以通过以下方式完成:将两个csv分别读取到一个数据帧中,然后合并到索引上并创建第3列作为增量。