【问题标题】:Finding the difference between times in different columns through a CSV file通过 CSV 文件查找不同列中的时间差
【发布时间】:2014-02-03 17:03:28
【问题描述】:

所以,我已经尝试过很多次了;这是我最近的尝试:

import csv
import collections
import datetime

print "Please type file name to open:"
fileName = raw_input('> ')
print ""


incidents = collections.Counter()
with open(fileName) as input_file:
    for row in csv.reader(input_file, delimiter=','):       
        d0 = str(incidents[row[8]])
        d1 = str(incidents[row[7]])
        date0 = datetime.datetime.strptime(d0, "%Y/%m/%d %H:%M:%S").date()
        date1 = datetime.datetime.strptime(d1, "%Y/%m/%d %H:%M:%S").date()
        delta = (date0 - date1).days
        print delta

基本上,我有一个包含两列数据的 CSV 文件。两者都是这种格式的日期:“1/21/2014 10:51 AM”。我需要能够获取日期的差异并将其转换为小数。

例如,如果第 1 列第 1 行是“1/21/2014 10:51 AM”,第 2 列第 1 行是“9/4/2012 2:56:29 AM”。那么最终输出应该是“504.33”。

如果需要,我可以发布其他尝试/更深入的解释。

【问题讨论】:

  • 你的问题是什么?
  • 如何通过 CSV 文件找到上述两个日期/时间之间的差异?
  • 另外,1/21/2014 VS %Y/%m/%d 似乎很明显顺序错误。它应该是 %e。请阅读您正在使用的功能的文档。
  • 您输入的时间戳不一致(一个有秒,另一个没有)。每列是否有任何一致性,或者日期是否随机缺少秒数?
  • @user3266742:我刚刚告诉过您,您的帖子中的日期不一致。您是否忘记在第一个时间戳中包含秒数?

标签: python csv datetime time import-from-csv


【解决方案1】:

关于您提供的日期,这两种格式中的一种应该可以工作。

以秒为单位:

"%m/%d/%Y %I:%M:%S %p"

没有秒:

"%m/%d/%Y %I:%M %p"

在此处阅读有关 strptime 格式行为的更多信息:Datetime documentation

通过解析的示例很好地解释了这一点。


例如,如果第 1 列第 1 行是“1/21/2014 10:51 AM”,第 2 列第 1 行是“9/4/2012 2:56:29 AM”。那么最终输出应该是“504.33”。

据此:

date0 = datetime.datetime.strptime(d0, "%m/%d/%Y %I:%M:%S %p")
date1 = datetime.datetime.strptime(d1, "%m/%d/%Y %I:%M %p")
delta = date0 - date1
return delta.days + (delta.seconds / 86400.0) # 60 seconds in 60 minutes in 24 hours

【讨论】:

    【解决方案2】:

    如果您的日期时间戳实际上是一致的(并且没有丢失秒数,就像在您的 "1/21/2014 10:51 AM" 示例中一样),那么您需要使用正确的格式来解析时间戳:

    date0 = datetime.datetime.strptime(d0, '%m/%d/%Y %I:%M:%S %p')
    date1 = datetime.datetime.strptime(d1, '%m/%d/%Y %I:%M:%S %p')
    delta = date0 - date1
    delta = delta.days + (delta.seconds / 86400.0)  # add day fraction
    print delta
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2013-07-12
      • 2012-07-03
      相关资源
      最近更新 更多