2017-01-06 3 views
1

입력 데이터는 AM/PM 형식으로 날짜가 지정된 CSV 파일에서 가져온 다음 CSV 파일을 sqlite 데이터베이스 테이블로 내보내는 데 사용됩니다.12 시간 형식을 24 시간 Python으로 변환

python 2.7 또는 3에 대한 12 시간 날짜를 24 시간 형식으로 변환하기위한 좋은 솔루션이나 기본 제공 함수가 있습니까? 데이터베이스에 가져올 날짜를 비교해야합니다.

다음 코드가 사용됩니다 : 나는 가장 관련성을 대부분의 데이터를 제거하고 보관

import pandas as pd 
import datetime as dt 

from sqlite3 import connect 
from glob import iglob 
from os.path import splitext, basename 


dbName = 'logs' 
logsDir = 'event_logs' 

def csvToDb(db, filename): 
    conn = connect(db) 
    df = pd.read_csv(filename,encoding='utf-8') 
    df.to_sql(splitext(basename(filename))[0], conn) 
    conn.close() 


def csvLogsToDb(directory): 
    for filename in iglob(directory + '/*.csv'): 
     print('WRITING TO DB | ' + filename) 
     csvToDb(dbName, filename) 

    print("DONE") 


if __name__ == "__main__": 
    csvLogsToDb(logsDir) 

하지만, 간단히 말해서,이 내 현재 입력하고 필요한 출력

입력 CSV 데이터 :

Level,DateTime  
Information,2017/01/06 9:06:02 AM 
Information,2017/01/06 9:02:44 AM 
Information,2017/01/06 8:56:48 PM 

전류 출력

COL1  
    Information  
    Information 
    Information 

COL2 
    2017/01/06 9:06:02 AM 
    2017/01/06 9:02:44 AM 
    2017/01/06 8:56:48 PM 

예상 출력

COL1 
    Information 
    Information 
    Information 

COL2 
    2017-01-06 09:06:02 
    2017-01-06 09:02:44 
    2017-01-06 20:56:48 
+1

[datetime.strptime을 사용하여 기간 (AM/PM)을 어떻게 계산할 수 있습니까?] (http://stackoverflow.com/questions/1759455/how-can-i-account-for-period-am- pm-with-datetime-strptime) –

+0

그러면 해당 날짜에 AM 또는 PM이 어떻게 표시됩니까? 그것은 그 정보를 읽을 수있는 날짜를 파서로 설정하는 것입니다. –

+0

@MartijnPieters : CSV 날짜 형식은 '2017/01/05 7:43:25 PM'입니다. 죄송합니다.이 질문이 어리석은 짓이라면. 나는 파이썬을 사용했지만 파이썬을 주로 사용하기 때문에 자주 사용하지 않습니다. – Elmar

답변

2

그냥 datetime parsing options available를 참조 날짜를 구문 분석 pandas.read_csv()을 말한다.

dateutil.parser 기본 파서는 AM/PM으로 시간을 처리 할 수 ​​있습니다. parse_dates 옵션을 구문 분석 할 열 인덱스 목록으로 설정하십시오. 당신은 날짜 패키지를 사용할 수 있습니다

>>> import pandas 
>>> from io import BytesIO 
>>> data = BytesIO(b'''\ 
... Level,DateTime 
... Information,2017/01/06 9:06:02 AM 
... Information,2017/01/06 9:02:44 AM 
... Information,2017/01/06 8:56:48 PM 
... ''') 
>>> pandas.read_csv(data, parse_dates=[1]) 
     Level  DateTime 
0 Information 2017-01-06 09:06:02 
1 Information 2017-01-06 09:02:44 
2 Information 2017-01-06 20:56:48 
+0

이제 완벽하게 작동합니다! parse_dates = true를 변경하면 TO parse_dates = [1]이 (가) 트릭을했습니다. 시간과 인내심에 감사드립니다. 정말 감사. – Elmar

0

from datetime import datetime 
data = '2:35 PM' 
standard_time_format = datetime.strptime(data, "%I:%M %p") 
only_in_24_hour_format = datetime.strftime(standard_time_format, "%H:%M") 
print only_in_24_hour_format 
print standard_time_format 

을 수행하려면 이것은

(14) 출력으로 다음을 줄 것입니다 : 샘플 입력의 경우, 그 열 1 것 : 35

1900-01-01 14:35:00

관련 문제