Python 如何在dbf文件中不执行eof循环的情况下执行?
我有一个python程序,它可以打开一个包含30000条记录的dbf文件,我想结束我的while循环,但出于某种原因,我的while循环保持打开状态Python 如何在dbf文件中不执行eof循环的情况下执行?,python,python-3.x,Python,Python 3.x,我有一个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[
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)
使用
break
中断循环
例:
x=0
尽管如此:
打印(x)
x+=1
如果x==100:
打破
这将提供以下输出:
1
2
3
...
98
99
如果嵌套while循环启动,它将永远不会结束,因为它的条件不会更改条件中使用的任何变量。如果将“while”改为“if”,您可能会得到期望的结果。然后,您可以将该条件用作while循环条件 此外,您当前的代码在while循环中的每个迭代中的newPayrollId都是相同的。我假设try-except应该在for循环的“for-row-in-table”中 这也有点让人困惑
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(Python的禅宗)指出,扁平比嵌套好。如果它是假的,我会在哪里打破我的循环呢?我尝试在不执行eof循环的情况下执行。你的意思是
如果为False:break
?对,我尝试在不执行eof循环的情况下执行,条件是:break
我现在正在测试它