在这段代码上绕圈子已经有一段时间了,可能需要帮忙。这可能是我在某个地方错过的小东西。
我有一个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']
但当我尝试通过线程来实现自动化时。计时器,
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']
我真的不知道它出了什么问题。我试过删除全局变量,但我需要为另一个函数删除它,也试过在缩进处移动,但没有效果。在这里真的需要帮忙。谢谢
尝试在每个循环的开头重置列。
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
我认为这是因为
def altogether():
threading.Timer(3.0, altogether).start() # You're passing this same methode into the timer.
match_file()
return
用另一句话来说,当你完全调用methode时。您启动一个Timer,它也启动这个方法,它启动一个新的Timer。等你应该这样做:
def altogether():
threading.Timer(3.0, match_file).start() # Passing match_file into the timer
return
或:
threading.Timer(3.0, altogether).start() # Initialize outside the methode.
def altogether():
match_file()
return