Python日志时间戳转换为mysql时间戳

时间:2013-08-13 15:08:23

标签: python mysql timestamp

我有一个带有时间戳的巨大日志记录文件,格式如下:

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()

3 个答案:

答案 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

请注意,strptimestrftime可能受当前区域设置的影响,您可能希望将区域设置设置为Cdatetime内部使用它模块也是如此,因为%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")