Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dbf文件中不执行eof循环的情况下执行?_Python_Python 3.x - Fatal编程技术网

Python 如何在dbf文件中不执行eof循环的情况下执行?

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[

我有一个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)

使用
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
我现在正在测试它