2012-02-08 2 views
0

일부 PHP 코드를 파이썬으로 번역 중입니다. 나는 어느 쪽의 전문가도 아니야. 이것은 많이있을 수 있지만, 조금은 인정 될 것입니다.PHP를 파이썬으로 번역하기 : 식별자 당 최소 및 최대 시간 찾기

나는이 코드 조각으로 특히 고심하고있다. 여기서 우리는 식별자 식별자, 즉 row [0] row [1] row [2]를 가진다. 행 [4]는 타임 스탬프입니다. 각 식별자에 대해 우리는 '시작'과 '종료'날짜를 찾기를 원합니다. 동료가 이렇게 코드를 작성한 방법입니다. 나는 어떤 일이 일어나고 있는지 이해할 때 주석을 추가했지만 이것을 파이썬으로 번역하는 방법은 아닙니다.

지금까지 파이썬에서는 식별자 : timestamp의 사전을 만들 수 있었지만 문제의이 부분에서 성공적으로 사용할 수 없었습니다.

질문 : -이 인스턴스에서 Python에 대한 매우 명확하고 도움이되는 것이 누락 되었습니까? - 파이썬 규칙 (있는 경우)에 대한 PHP의 매핑을 쉽게 이해할 수 있습니다.

다음
identify endpoints of time<br> 
starttime<br> 
endtime<br> 
create 15 minute time vector while : startime < time < endtime<br> 

내가 파이썬에서 지금까지이 작업은 다음과 같습니다 :

fgetcsv($inputhandle); //read input as csv 
while ($row = fgetcsv($inputhandle)) { //read each line in record 
    $date_arr = date_parse_from_format("Y-m-d H:i:s",$row[4]); //parse timestamp 
$newdate = mktime($date_arr['hour'], 
        $date_arr['minute'], 
        $date_arr['second'], 
        $date_arr['month'], 
        $date_arr['day'], 
        $date_arr['year']); //store each piece in array form   

$endpoints[$row[0]][$row[1]][$row[2]]['end'] = $newdate; //identify endpoint      

if(!isset($records[$row[0]][$row[1]][$row[2]])) { 
    $endpoints[$row[0]][$row[1]][$row[2]]['start'] = $newdate; //identify startpoint 
} 

$records[$row[0]][$row[1]][$row[2]][$newdate]=$row[5]; //row 5 holds values we care about 

} 컨텍스트에 대한

, 여기에 내가 복제려고하는 과정입니다

import sys 
import csv 
from datetime 
import time 
import numpy 
import itertools 

//open file with csv reader 
filename = open('ICUdata.csv', 'rb') 

d = {} // declare dictionary variable 

//read file as csv, parse 
spam = csv.reader(filename, delimiter=',') 


next(spam) #skip header 
for row in spam: // first fill in missing values 
if row[1] == '': 
    row[1] = '99999' 
if row[2] == '': 
    row[2] = '99999' 

//need datetime parse 
datestring = row[4] 
date = time.strptime(datestring, "%Y-%m-%d %H:%M:%S") // parsed datetime 

    //create dictionary of identifiers : realtime 
k = id #need this instead of just row[0:3] which creates list 
v = row[4] 

if k not in d: 
    d[k] = [v] 
    #this = row[0:3].append(endpoint) 
else: 
    d[k].append(v) 

답변

4

당신이 time.strptime(string[, format])에 의해 반환되는 패키지 시간에 struct_time입니다. 이름있는 튜플입니다.

작은 코드 입증한다 : 출력을 생성

import time 
fifth_element_of_row = "2000-12-31 23:11:12" 
my_time_struct = time.strptime(fifth_element_of_row, "%Y-%m-%d %H:%M:%S") 
print my_time_struct 

:

time.struct_time(tm_year=2000, tm_mon=12, 
tm_mday=31, tm_hour=23, tm_min=11, tm_sec=12, 
tm_wday=6, tm_yday=366, tm_isdst=-1) 

개별 요소를 복구 할 수있는들을 통해

print my_time_struct.tm_year 

를 출력하는
2000 

편집 : 날짜 비트를 보았을 때 돌진했습니다. 놀랍게도, 아무도 아직 답변을 드리지 않았으므로 나는 당신을 위해 냄비를 조금 달게하려고 노력할 것입니다.

저는 개인적으로 csv에 대해 file.readline()과 re.split()를했을 것입니다. 왜냐하면 저는 DIY'er (또는 NIH'er)가되는 경향이 있기 때문에 개인적으로는 그 중 하나를 색칠하고 싶습니다 ...)

약간의 연구를 통해, 저는 방금 파이썬이 이러한 상황을 처리하기위한 CSV 모듈을 가지고 있다는 것을 배웠습니다. 2.3 이후로 주변에 있었고 자신보다 더 강력했습니다. 그림을 이동.당신의 열람

출처 :

Python time module

Python csv module

+0

감사합니다. 내가 사용하고있는 코드를 추가해야한다는 것을 알았지 만, 지금까지 일을 제대로하고 있다는 것을 아는 것이 좋습니다. –

1

아마 타사 dateutil 모듈 (당신이 http://labix.org/python-dateutil를 참조 먼저 설치해야합니다) 도움이 될 수 :

import dateutil.parser 
# ... 
endpoints[someindex] = dateutil.parser.parse(row[4]) 

그것은 쉽게 파이썬의 내장 datetime 모듈에서 datetime을 제공 할 것이고,이 모듈은 fo r 추가 계산.

문제에 따라 시간대가 필요할 수 있습니다. 자세한 내용은 http://docs.python.org/library/datetime.html을 참조하십시오.

관련 문제