使用Python从日期和时间列解析时间,而不影响日期

时间:2013-05-10 22:17:32

标签: python date datetime csv time

我正在使用Python来清理要导入Access的CSV文件,我得到的一个错误与一个应该是Date格式的列相关,而是一个Date / Time格式。典型的单元格如下所示:

08/02/2012 02:35p

我希望它看起来像这样:

08/02/2012

我无法确定如何做到这一点。如果有帮助,所有数据都在同一列中。

澄清:我正在修改的CSV文件有很多字段,其中一些字段与日期有关,但这是唯一包含时间的列。我需要修复整个列,以便减少时间,不更改日期,也不会影响每行中的其他日期。
所以看起来更像是这样:

Name, Check-inDate, Check-outDate, AppointmentScheduled, Billed
Frank Stalone, 08/15/2012, 08/18/2012, 08/02/2012 02:35p, 08/22/2012

我想做的就是摆脱“02:35p”

(在旁注中,我真正希望我能做的是修复那些给我们提供这些报告的可笑的破坏程序,这些报告的格式不正确,但是THE MAN不会让我们这样做:/)

编辑以回应评论: 时间是一致的。它总是MM / DD / YYYY空间HH:MM a / p。所以,基本上,我可以jsut从字段中删除最后7个字符,它会给出所需的结果。

2 个答案:

答案 0 :(得分:3)

date = "08/02/2012 02:35p"
print date.split()[0]

但肯定不是你想要的......

也许

import time

date = "08/02/2012 02:35p"
t = time.strptime(date.replace("p","pm").replace("a","am"),"%m/%d/%y %I:%M%p")
my_desired_time_format = "%m/%d/%Y"
print time.strftime(my_desired_time_format,t)

会更好

要做你想做的事,你会使用像

这样的东西
import re
with open('some.csv','r') as fin:
     data = re.sub("(\d{2}/\d{2}/\d{4}) \d{2}:\d{2}[ap]","\\1",fin.read())
with open('fixed.csv','w') as fout:
     fout.write(data)

尽管使用awk或sed可能会更好(如果你使用的是具有这些功能的操作系统)

答案 1 :(得分:0)

为了完整起见,您可以使用成员函数datetime.datetime.date()获取日期时间对象的日期部分。

以下是一个示例(解析是使用dateutil.parser完成的,但您也可以使用datetime.datetime.strptime()。):

>>> import dateutil.parser
>>> s = "08/02/2012 02:35p"
>>> dateutil.parser.parse(s)
datetime.datetime(2012, 8, 2, 14, 35)
>>> dateutil.parser.parse(s).date()
datetime.date(2012, 8, 2)

在旁注中,这种方法也可以处理正确的条目:

>>> s = "08/02/2012"
>>> dateutil.parser.parse(s).date()
datetime.date(2012, 8, 2)