[英]How to make do while not eof loop in dbf files?
我有一个 python 程序,它打开一个包含大约 30000 条记录的 dbf 文件,我想结束我的 while 循环,但由于某种原因我的 while 循环保持打开状态。
with DBF('data.DBF',recfactory=None,load =True) as table:
for row in table:
stono = (row[1][1])
payrollid = (row[15][1])
busdate = (row[2][1])
firstname = (row[13][1])
lastname = (row[14][1])
rows = [[stono,payrollid,busdate]]
print(rows)
try:
while True:
boolHasBlank = False
lastSsn = ssn
firstSsn = ssn
newPayrollId = payrollid.strip()
newStoNo = stono
Fname = firstname
Lname = lastname
while True and stono == newStoNo and payrollid == newPayrollId:
if ssn is not firstSsn:
boolHasBlank = True
else:
lastSsn = ssn
except EOFError as e:
print (e)
如果您的嵌套 while 循环开始,它将永远不会结束,因为它的条件不会更改条件中使用的任何变量。 如果将“while”更改为“if”,您可能会得到想要的结果。 然后,您可以采用该条件并将其用作您的 while 循环条件。
此外,您当前的代码将使 while 循环中的每次迭代的 newPayrollId 都相同。 我假设 try except 应该在“for row in table”for循环内。
这也有点令人困惑,因为你有
firstSsn = ssn
但是在你的嵌套while循环中你有
if ssn is not firstSsn:
这总是假的,所以
lastSsn = ssn
将是唯一运行过的东西,但你在 firstSsn = ssn 之前已经有了 lastSsn = ssn。 在你的 while 条件下,你也有一个不必要的 True 。 因此,我认为您的代码可以更改为:
ssn = "something defined earlier"
with DBF('data.DBF', recfactory=None, load=True) as table:
for row in table:
stono = (row[1][1])
payrollid = (row[15][1])
busdate = (row[2][1])
firstname = (row[13][1])
lastname = (row[14][1])
rows = [[stono, payrollid, busdate]]
print(rows)
try:
while stono == newStoNo and payrollid == newPayrollId:
boolHasBlank = False
lastSsn = firstSsn = ssn
newPayrollId = payrollid.strip()
newStoNo = stono
Fname = firstname
Lname = lastname
except EOFError as e:
print(e)
当然,我可能没有足够的信息来说明您的代码究竟做了什么。 也许有一个线程进程改变了我们看不到的 snn 值。 附带说明一下,将 while 循环嵌套在其他 while 循环中通常是不好的做法。 PEP 20 (The Zen of Python) 指出扁平比嵌套更好。
使用break
打破循环例如:
x = 0
while True:
print(x)
x += 1
if x == 100:
break
这给出了 output:
1
2
3
...
98
99
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.