2012-02-08 14 views
0

私はいくつかのPHPコードをPythonに翻訳しています。私はどちらも専門家ではない。これはたくさんあるかもしれませんが、ちょっとしたことは分かります。PHPをPythonに翻訳する:識別子ごとに最小時間と最大時間を見つける

私は特にこのコードの塊に苦しんでいます。ここでは、識別子識別子、つまり行[0]行[1]行[2]があります。行[4]はタイムスタンプです。それぞれの識別子について、あなたが思うように「開始」と「終了」の日付を見つけたいと思っています。これは、同僚がこれを行うコードを書いたものです。私は、何が起こっているのかを理解しながらコメントを追加しましたが、これをPythonにどのように翻訳するのかは分かりませんでした。

これまでPythonでは識別子のタイムスタンプの辞書を作成できましたが、問題のこの部分でうまく使用できませんでした。

質問: - このインスタンスでは、Pythonについて非常に明白で役に立つものがありますか? - どこでもPHPがPythonのルールにマッピングされていることがわかります(存在する場合)。コンテキストの場合

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 

}

、ここで私が複製しようとしているプロセスです:

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

ここに私はPythonでこれまで持っているものです。

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 

を出力
print my_time_struct.tm_year 

:個々の要素を介して回収することができる

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) 

そこからの

2000 

編集:私は日付ビットを見たときに私はこれを突き進んだ。驚いたことに、他の誰もまだ答えていないので、私はあなたのために鍋を少し甘くしようとします。

私はDIY'er(またはNIH'er)という傾向があるので、個人的にはおそらくちょうどfile.readline()とcsvのre.split()を行っているでしょう。 ...)

しかし、私はちょうどそのpythonがそのような状況を処理するためのcsvモジュールを持っていることを学んだことがあります。これは2.3以降であり、確かにあなた自身で行うよりも堅牢です。 Go figure。あなたの閲覧のための

出典:

Python time module

Python csv module

+0

ありがとうございました!私が使用していたコードを追加する必要があることに気がついたが、これまでのことを今まで行ってきたことを知っているのは良い救済だ。 –

1

多分サードパーティdateutilモジュールは、(あなたがhttp://labix.org/python-dateutilを参照して、まずそれをインストールする必要があります)役立つことができます。

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

これは簡単にPythonのdatetimeモジュールに組み込まれています。これはfo r次の計算。

問題によっては、タイムゾーンが必要な場合があります。詳細については、http://docs.python.org/library/datetime.htmlをお読みください。

関連する問題