已经围绕这段代码转了一圈,可以用一只手。 这可能是我错过的地方。
我有一个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']
但是当我尝试使用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 :(得分: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
答案 1 :(得分:0)
我认为这是因为:
def altogether():
threading.Timer(3.0, altogether).start() # You're passing this same methode into the timer.
match_file()
return
当你完全调用这个方法时,用其他词语。你启动一个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