2013-09-08 3 views
0
elif row[inc3].startswith('LIGHT ON'): 
     onstr = row[inc3 + 1] 
     onlst.append(onstr) 
    elif row[inc4].startswith('LIGHT OFF'): 
     offstr = row[inc4 + 1] 
     offlst.append(offstr) 

for idx, val in enumerate(onlst): 
    tdifflst.append(float(offlst[idx]) - float(onlst[idx])) 

여기 EXCEL 스프레드 시트에서 데이터를 추출하고 분석하는 코드에서 코드를 추출했습니다. 두 가지 유형의 값은 표시등이 켜지는 시간과 표시등이 꺼진 시간입니다. 예를 들어, 0500에 켜져 있고 2300에서 꺼져 있습니다.파이썬에서 .csv에서 가져온 시간을 줄입니다.

나는 오프 타임에서 온 시간을 빼기를 원하지만, 분명히 60 분에서 1 시간 것 때문에 실제 플로트로 처리 할 수는 없습니다. 이 "수레"를 시대와 어떻게 대우합니까?

+0

''0500 '과 같은 문자열을 플로트로 변환하는 방법을 묻는 중입니까? 왜냐하면 float 변환은 문자열의 0을 무시하기 때문에'float ('0500')'을 할 수 있고 올바른 float 500.0을 얻을 수 있기 때문입니다. 미안 당신이 묻고있는 것이 아닌 경우. 나는 다소 불확실하다. – Shashank

+0

내가 묻고있는 것은 아닙니다. elyase의 첫 번째 답변과 내 의견을 확인하십시오. – SciurusDoomus

+0

당신은 Excel이 어떤 식 으로든 관련되어 있음을 암시하는'[excel]'이라고 태그를 붙 였지만 어떻게 말하지는 않습니다. 데이터를 Excel에 입력하고 CSV로 저장합니까? 또는 네이티브 Excel 파일 ('.xls' 또는'.xlsx')로 시작하여 * CSV (아마도 파이썬을 사용하여)로 변환합니까? 누가 데이터를 입력합니까? 다양한 답에 대한 귀하의 의견은 데이터 입력 방법을 결정할 수 있음을 시사합니다 (예를 들어 2500 대 0100). 그렇다면 왜 PyNEwbie가 제안한대로 Excel의 날짜와 시간을 사용하지 않는 것입니까? –

답변

3

은 당신이 뭔가를 할 수 있습니다 :

>>> from datetime import datetime 

>>> light_on = datetime.strptime('0500', '%H%M') 
>>> light_off = datetime.strptime('2300', '%H%M') 
>>> print light_off - light_on 
18:00:00 

light_onlight_off는 날짜 객체와의 차이는 timedelta 개체입니다.

+0

나는 이것들을 upvoted 그러나 솔직히 초보자로서 나는 정말로 나의 특정한 문제를 다루지 않기 때문에 나는이 답을 싫어한다. 올바른 코드는 light_on = datetime.strptime (onstr, % H % M)이어야합니다. 대답을 통해 나는 그것을 알아 내야하고 이미 잃어버린 것입니다 - 그래서 내가 처음에 질문을 게시했습니다. – PyNEwbie

+0

여기에 커브가 있습니다 : 내가 말하면, 다음날 오전 1시에 조명을 켜면이 기능이 작동할까요? 엑셀 시트에서 나는 이것을 "2500"이라고 썼지 만 그것은 바뀔 수있다. – SciurusDoomus

+0

@SciurusDoomus, 그렇습니다. 그렇지만 파이썬이 여러분이 전날 또는 그 다음날 1AM을 참조했는지 알 수 있도록 날짜를 지정해야합니다. 형식이' '% d % H % M' '으로 변경됩니다. – elyase

1

난 당신이 적어도 시간이 항상 양식 HHMM에보고 될 것이라는 의미 있다고 생각

그러므로 코드를

elif row[inc3].startswith('LIGHT ON'): 
    raw_time = row[inc3 + 1] 
    hour = raw_time[0:2] 
    minute = raw_time[2:] 
    minute_hour_fraction = int(minute)/60. 
    str_time = ''.join([hour,str(minute_hour_fraction)[1:]]) 
    float_time = float(str_time) 

    onlst.append(float_time) 
elif row[inc4].startswith('LIGHT OFF'): 
    same as above 
+0

다음날 오전 1시에 전화하면 "2500"이 작동하는 것처럼 보입니다. 그 맞습니까? – SciurusDoomus

+1

네,하지만 실제로 Excel의 날짜/시간 기능/표현식을 사용하면 더 좋아질 수 있다고 생각하지만 조금 더 많은 작업이 필요합니다. – PyNEwbie

1

또 다른 방법 수정 간단하다 :

import datetime 

hh, mm = int(offstr[0:2]), int(offstr[2:4]) 
# a dummy date 101/1/1 
toff = datetime.datetime(101, 1, 1, hh, mm) 

hh, mm = int(onstr[0:2]), int(onstr[2:4]) 
tdiff = toff - datetime.timedelta(hours=hh, minutes=mm) 

tdiff.hour 
tdiff.minute 

또한 datetime 개체에 전체 날짜 (년, 월, 일)를 추가 할 수 있으므로 24 시간보다 큰 차이를 얻을 수 있습니다.

관련 문제