【问题标题】:Problem Looping when Comparing Datetime Objects Between Two CSV Files比较两个 CSV 文件之间的日期时间对象时出现循环问题
【发布时间】:2018-12-12 16:01:40
【问题描述】:

我有两个 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 文件,但随后我的程序冻结(我认为是因为它无休止地循环)。

【问题讨论】:

    标签: python python-2.7 csv


    【解决方案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)
    

    请注意,zip 会将生成的对象长度缩减为最短的数组。

    【讨论】:

    • 谢谢!这很有效,对我来说是一个比使用 Pandas 更好的解决方案。 (我之前错过了声明空列表。Duh!)
    【解决方案2】:

    我建议阅读这两个 csv 文件并保存适用的数据。然后将两者 zip 在一起,并对 zip 中的每个元组执行差异

    【讨论】:

      【解决方案3】:

      这可以通过将两个 csv 分别读入一个数据框然后合并索引并创建第三列作为增量来完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 2019-08-29
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多