[英]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.