2014-09-24 133 views
0

在这段代码上绕了一圈并且可能用一只手。 它可能是我错过某个地方的小事。Python的threading.timer问题/ for循环

我有我试着去窥探一些价值出来的CSV文件,对于我们来说,它看起来是这样的:

columns : A, B, C, D 
row[0]: bad, x, y, s 
row[1]: good1, x, y, z 
row[2]: good2, x, y, z 

我的代码的部分如下所示:

def match_file(): 
    global name, 
    aziVal1 = 'z' 
    with open(path_address, 'rb') as userdataCSV: 
     reader = csv.reader(userdataCSV) 
     for row in reader: 
      for (i,v) in enumerate(row): 
       if aziVal1 in row: 
        columns[i].append(v) 
     name = columns[0] 
     print name 
    return 

如果我从终端一次运行一个代码,它工作正常,并提供输出

['good1', 'good2'] 

但是当我tr Ÿ与threading.Timer自动化此,

def altogether(): 
    threading.Timer(3.0, altogether).start() 
    match_file() 
    return 

这成为输出

['good1', 'good2'] 
['good1', 'good2', 'good1', 'good2'] 
['good1', 'good2', 'good1', 'good2', 'good1', 'good2'] 
['good1', 'good2', 'good1', 'good2', 'good1', 'good2', 'good1', 'good2'] 

我真的不知道什么是错。我尝试删除全局变量,但我需要另一个功能,也尝试转移缩进无效。真的可以在这里使用一只手。谢谢!

回答

0

尝试重置每个循环开始处的列。

def match_file(): 
    global name, 
    aziVal1 = 'z' 
    columns = [] 
    with open(path_address, 'rb') as userdataCSV: 
     reader = csv.reader(userdataCSV) 
     for row in reader: 
      for (i,v) in enumerate(row): 
       if aziVal1 in row: 
        columns[i].append(v) 
     name = columns[0] 
     print name 
    return 
+0

谢谢您的回复!我终于明白了,我已经宣布了列作为全球变量的错误!您添加的一行代码在代码中确实指出了这一点。太感谢了! – 2014-09-24 10:19:57

+0

@JoelOng欢迎!不要忘记接受它作为答案。 :) – 2014-09-25 00:47:49

0

我认为这是东阳的这个:

def altogether(): 
    threading.Timer(3.0, altogether).start() # You're passing this same methode into the timer. 
    match_file() 
    return 

随着toher也就是说,当你干脆叫梅索德。你启动一个Timer,它也启动这个方法,它启动一个新的Timer。等 你应该这样做:

def altogether(): 
    threading.Timer(3.0, match_file).start() # Passing match_file into the timer 
    return 

OR:

threading.Timer(3.0, altogether).start() # Initialize outside the methode. 
def altogether(): 
    match_file() 
    return 
+0

谢谢文森特:)不幸的是,第一个选项,我得到了结果 – 2014-09-24 09:49:49

+0

谢谢文森特:)不幸的是,第一个选项,我得到了['good1','good2']没有它运行脚本每3秒。 我想它完全改变到 DEF(): 而真: match_file() time.sleep(3) 这给了我同样的结果,因此得到了与做for循环顶部。生病尝试继续努力。尽管谢谢! – 2014-09-24 10:00:33