我有一个带有时间戳的巨大日志记录文件,格式如下:
08/07/2013 11:40:08 PM INFO
我想使用python将其转换为mysql时间戳,例如:
2013-04-11 13:18:02
我已经编写了一个python脚本来做到这一点,但我想知道是否已经编写了一些内置的python包/函数来轻松,高效地完成时间戳例程工作。
由于数据“按摩”是我日常工作的一部分,因此对我的代码效率或新功能或新工具的使用的任何建议都将非常感激。
(注意:输入文件由^ A分隔,我也在同时将其转换为csv)
($ cat output.file | python csv.py> output.csv)
import sys
def main():
for line in sys.stdin:
line = line[:-1]
cols = line.split(chr(1))
cols[0] = convertTime(cols[0])
cols = [ '"' + col + '"' for col in cols ]
print ",".join(cols)
def convertTime(loggingTime):
#mysqlTime example: 2013-04-11 13:18:02
#loggingTime example: 08/07/2013 11:40:08 PM INFO
#DATE
month, day, year = loggingTime[0:10].split('/')
date = '/'.join([year,month,day])
#TIME
hour, minute, second = loggingTime[11:19].split(':')
flag = loggingTime[20:22]
if flag == 'PM':
hour = str(int(hour) + 12)
time = ":".join([hour, minute, second])
mysqlTime = date + " " + time
return mysqlTime
if __name__ == '__main__':
main()
答案 0 :(得分:4)
使用time.strptime
解析时间,然后time.strftime
重新格式化为新格式?
import time
input_format = "%m/%d/%Y %I:%M:%S %p INFO" # or %d/%m...
output_format = "%Y-%m-%d %H:%M:%S"
def convert_time(logging_time):
return time.strftime(output_format, time.strptime(logging_time, input_format))
print convert_time("08/07/2013 11:40:08 PM INFO")
# prints 2013-08-07 23:40:08
请注意,strptime
和strftime
可能受当前区域设置的影响,您可能希望将区域设置设置为C
(datetime
内部使用它模块也是如此,因为%p
可以为不同的语言环境提供不同的AM / PM格式;因此,为了安全起见,您可能需要在开始时运行以下代码:
import locale
locale.setlocale(locale.LC_TIME, "C")
答案 1 :(得分:2)
我建议使用datetime
模块。您可以将日期字符串转换为python datetime
对象,然后可以使用该对象输出重新格式化的版本。
from datetime import datetime
mysqltime = "2013-04-11 13:18:02"
timeobj = datetime.strptime(mysqltime, "%Y-%m-%d %H:%M:%S")
loggingtime = timeobj.strftime("%m/%d/%Y %H:%M:%S %p")
答案 2 :(得分:1)
按照建议将其转换为这样的strptime:
converter="%d/%m/%Y %H:%M:%S %p INFO"
result = dt.datetime.strptime("08/07/2013 11:40:08 PM INFO",converter)
由于“INFO”-String(编辑:不需要),需要拆分。然后用strftime解析:
result.strftime("%Y-%m-%d %H:%M:%S")