2012-02-08 64 views
0

我正在翻译一些PHP代码到Python查找最小和最大时间。我也不是专家。这可能会很多,但有一点值得赞赏。翻译PHP到Python:每个标识符

我尤其是这样大块的代码的挣扎。在这里,我们有一个标识符,即row [0] row [1] row [2]。行[4]是时间戳。对于每个标识符,我们都希望找到“开始”和“结束”日期 - 按照您的想法命名。这是一位同事编写代码的方式:我已经添加了注释,因为我明白发生了什么,但不知道如何将其转换为Python。

到目前为止,在Python中,我已经能够创建一个标识符字典:timestamp,但是还没有能够成功地在这部分问题中使用它来获得我的优势。

问题: - 我丢失了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 

产生的输出:

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,取决于您想如何为其着色...)

通过一些研究,虽然我刚刚了解到python具体有一个csv模块来处理这种情况。从2.3开始,它肯定比自己做得更强大。去搞清楚。

来源,请过目:

Python time module

Python csv module

+0

谢谢!我意识到我应该添加我一直使用的代码,但知道我到目前为止一直在做的事情是一个很好的解决办法。 – 2012-02-08 04:21:16

1

也许第三方dateutil模块(需要先安装它,见http://labix.org/python-dateutil)可能会有所帮助:

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

它可以很容易地从Python的内置日期时间模块给你datetime,可以使用它进一步计算。

根据您的问题,可能需要时区。详情请阅读http://docs.python.org/library/datetime.html