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

ただし、現在のロケールの影響を受ける可能性があることに注意してください。異なるロケールの AM/PM に異なるフォーマットを与えることができるため、ロケールを に設定することをお勧めしますstrptime(モジュールによって内部的にも使用されます)。したがって、安全のために、最初に次のコードを実行する必要がある場合があります。strftimeCdatetime%p

import locale 
locale.setlocale(locale.LC_TIME, "C")
于 2013-08-13T15:16:05.683 に答える