2015-03-08 27 views
1

我有一个基本的Python代码,我试图比较一次到另一次(我不得不承认我有点新的python)。我使用Delorean将字符串转换为时元整数并将其与变量lastTime进行比较。我的代码的其余部分工作,但只要我尝试添加新的函数,我的读数变为空白。我正在努力解决这个问题,因为Python不会抛出任何错误,它只是不给我任何东西。在Python中使用函数来比较时间戳(与Delorean)

下面是它的全部代码:

import random,sys,csv, delorean 
from collections import defaultdict 
from delorean import Delorean 
from delorean import parse 

size = ['small','medium','large'] 
color = ['blue','red','green'] 
body = ['fish','squid'] 

fishparts = defaultdict(set) 
lastfish = defaultdict(str) 
lastTime = 0 


def tenMinInterval(ts, lt): # HAVING PROBLEMS HERE 
    global lastTime 
    curTime = Delorean(ts).epoch() 
    if curTime > lt+600000: # timestamp is a string and lastTime is an int 
     # return True 
     lastTime = curTime 
     return 'Upadted Time' 
    else: 
     # return False 
     return 'Not Upadted' 

def complexityFish(ps,pf): 
    score = 1 
    if ps == 'medium': 
     score += 1 
    elif ps == 'large': 
     score += 2 
    if pf == 'squid': 
     score += 2 
    return str(score) 

def diffPrev(a,la,b,lb,c,lc): 
    score = 0 
    if a != la: 
     score += 1 
    if b != lb: 
     score += 1 
    if c != lc: 
     score += 1 
    return str(score) 

def diffUniq(player,x): 
    score = 0 
    for e in x: 
     if e not in fishparts[player]: 
      score += 1 
     fishparts[player].add(e) 
    return str(score) 


def parseOneFish(p_player,p_fish): 
    player = p_player 
    fish = p_fish 
    if lastfish[player] != '': 
     ls,lc,lt = lastfish[player].split(' ') 
    else: 
     ls = lc = lt = '' 
    s,c,t = fish.split(' ') 
    lastfish[player] = fish 
    return((complexityFish(s,t),diffPrev(s,ls,c,lc,t,lt),diffUniq(player,[s,c,t]))) 


csvfilename = sys.argv[1] 
csvdata = csv.DictReader(open(csvfilename,'rb'),delimiter=',') 
x = False 
for line in csvdata: 
    if not x: 
     print ','.join([k for k in line]), 
     print ',complexity,diffprev,diffuniq' 
     x = True 
    try: 
     cx,dp,du = parseOneFish(line['playerID'],line['fishType']) 
     tm = tenMinInterval(line['timestamp'], lastTime) # HAVING PROBLEMS HERE 
     print ','.join([line[k] for k in line]) + ',', 
     print ','.join([cx,dp,du]) 
     print ','.join(tm) 
    except: 
     print '' 

我与挣扎的部分是在功能tenMinInterval并在底部在tm = tenMinInterval(line['timestamp'], lastTime) 我知道回报是没有做太多,但现在是不应该把它的其余部分改正?

这里是我的csv file as well

+1

如果您需要'timestamp'和调整时间戳之间的差异,为什么不使用'excel'(或'googlesheets')来为您做计算?听起来很容易 – letsc 2015-03-08 22:18:51

+2

我猜'tenMinInterval'引发了一些异常,然后执行exept子句中的'print''',用空行填充屏幕。用'raise'替换'print'''看看发生了什么。一般来说,列出要捕获的异常类型(例如'IOError'除外)是一个好主意,所以您不会意外捕获任何您没有预料到的异常。 – mkrieger1 2015-03-08 23:28:34

+0

@letsc,因为我将在某些情况下拉动+10,000项目,并且这样做是不能接受的(并且手动拉下它并编辑,然后在python中操作它会增加一些步骤,这些步骤在python中应该很容易实现) 另外我想用它做更多的事情,一旦我找出差异 - 这只是让我到下一步 – Mike 2015-03-09 01:00:07

回答

1

所以感谢mkrieger1我能够更好地检查我的错误示​​例,它结束了一个分析问题,我的DB如何构建日期和默认如何Delorian读取它。

这里的功能固定:

def tenMinInterval(ts, lt): 
    global lastTime 
    strTime = delorean.interface.parse(ts, dayfirst=False, yearfirst=False) 
    curTime = strTime.epoch() 
    print curTime 
    if curTime > lt+600: # timestamp is a string and lastTime is an int 
     # return True 
     lastTime = curTime 
     print 'Time Updated' 
    else: 
     # return False 
     print 'Time not Updated' 

万一有人需要它有分析日期herehere的解释。虽然修补我还需要添加from delorean import epoch