【问题标题】:Python logging time stamp convert to mysql timestampPython记录时间戳转换为mysql时间戳
【发布时间】:2013-08-15 06:50:38
【问题描述】:

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

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

【问题讨论】:

    标签: python mysql timestamp


    【解决方案1】:

    使用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 模块也在内部使用它),因为 @987654328 @ 可以为不同的语言环境提供不同的 AM/PM 格式;因此,为了安全起见,您可能需要在开始时运行以下代码:

    import locale 
    locale.setlocale(locale.LC_TIME, "C")
    

    【讨论】:

    • 只是好奇:str p时间和str f时间,这里的p和f是什么缩写? p:解析? f: printf?
    • p: parse, f: format - 就像 printf: print with format。
    【解决方案2】:

    按照建议,使用 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")
    

    【讨论】:

      【解决方案3】:

      我会推荐使用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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        • 2022-07-20
        相关资源
        最近更新 更多