【问题标题】:Script and function loops through data twice脚本和函数循环遍历数据两次
【发布时间】:2014-07-02 15:31:34
【问题描述】:

我试图了解这是否是 xlrd mod 中的正常行为,或者我是否在滥用某些东西。代码如下:

import xlrd
workbook = xlrd.open_workbook('exceptions v2.xlsm')

worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows - 1
curr_row = -1
data = []
print 'begin loop'
while curr_row < num_rows:
    curr_row += 1
    row = worksheet.row(curr_row)
    print row
    data.append(row)

print 'out of loop'

当我运行脚本时,它会打印两次begin loopout of loop 以及电子表格中的所有数据。所以换句话说,这个while循环运行了两次然后停止。我在打印out of loop 之后抛出了raise SystemExit,脚本在我本来可以例外的地方停止了。

另一个想法也是,最终用途是通过将 excel 中的每一行附加到列表中来在 python 中创建一个列表(我在这里称之为数据),我注意到我的列表中没有重复,即使我看到打印语句运行两次。

【问题讨论】:

  • 这段代码是在函数中调用还是整个脚本?因为如果这是整个脚本,似乎没有理由让它打印两次打印语句。如果它在一个函数中,那么为什么你没有双倍数据是有道理的,因为数据列表在循环运行之间被重置。
  • 我尝试了两者并得到相同的结果。但是,我将它用作实际程序底部的脚本,而不是在新文件中执行。当我打开一个新文件并对其进行测试时,一切正常。但是很好地观察正在重置的列表,这很有帮助。显然我的程序中一定有一些东西要经历两次,我刚刚挂断了 xrld 因为我对那个 mod 不是很熟悉。

标签: loops python-2.7 xlrd


【解决方案1】:

嗯,我找到了答案。问题出在我的导入语句中。

我有两个文件 import_kip.py 和 initialize.py。我在initialize.py 的底部测试了上面的xlrd 脚本,然后将initialize.py 导入import_kip.py,然后将import_kip.py 导入我的initialize.py 文件。所以基本上脚本是由 import_kip.py 和 initialize.py 运行的。而且因为脚本以data = [] 开头,所以每次运行它都会清除我的列表,所以我没有得到重复。

我知道这很令人困惑,但希望对以某种方式重现此内容的人有所帮助。

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 2020-09-15
    • 2019-12-10
    • 2021-12-15
    • 1970-01-01
    • 2015-03-01
    • 2019-08-29
    • 1970-01-01
    • 2017-01-15
    相关资源
    最近更新 更多