我在循环目录的脚本中使用While循环,在目录中查找新文件并对添加的文件执行操作;如果没有添加文件,则while循环中断并且脚本结束。但是,我在循环中的变量赋值方面遇到了一些麻烦。我试图让一个变量取值变量2,然后删除第二个变量的内容。但是,当我尝试为变量2获取新变量时,变量1在它到达代码部分之前再次获取这些变量,从而表示while循环中断。
before = []
after = []
while True:
time.sleep(60)
for folder in folders:
files = os.listdir(os.path.join(path, folder))
for f in files:
after.append(f)
added = [f for f in after if f not in before]
if not added:
break
for f in added:
## do some action ##
before = after
del after[:]
del added[:]
while循环在第二次迭代期间中断,并且在检查变量时,before
和after
变量是相同的(两者都包含包含在第二次迭代中添加的变量的文件)。由于循环尚未到达before
在第二次迭代中获取after
内容的部分,为什么它具有这些值?
答案 0 :(得分:2)
您的before = after
行主要导致before
和after
指向相同的基础列表:
In [15]: a = [1,2,3]
In [16]: b = a
In [17]: id(a), id(b)
Out[17]: (4350556208, 4350556208)
In [18]: del a[:]
In [19]: a.append(4)
In [20]: b
Out[20]: [4]
您可以使用copy
库或仅使用自己的简短副本来解决此问题:
In [24]: a = [1,2,3]
In [25]: b = [e for e in a]
In [26]: id(a), id(b)
Out[26]: (4349521576, 4349826040)