1

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

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

3 回答 3

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")
于 2013-08-13T15:16:05.683 回答
2

我建议使用该datetime模块。您可以将日期字符串转换为 pythondatetime对象,然后您可以使用它来输出重新格式化的版本。

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")
于 2013-08-13T15:19:54.930 回答
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")
于 2013-08-13T15:28:37.473 回答