2014-09-24 134 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