0

我正在使用 Python 清理要导入 Access 的 CSV 文件,我得到的错误之一与应该是日期格式的列有关,但它是日期/时间格式。一个典型的单元格如下所示:

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”

(附带说明一下,我真正希望我能做的是修复可笑的损坏程序,该程序为我们提供了这些格式不正确的报告,但男人不会让我们这样做:/)

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

4

2 回答 2

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 可能会更好(如果您使用的是具有这些功能的操作系统)

于 2013-05-10T22:30:20.143 回答
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)
于 2013-05-13T18:42:36.360 回答