【问题标题】:How to re-write a while statement as an if statement in Python 2.7?如何在 Python 2.7 中将 while 语句重写为 if 语句?
【发布时间】:2018-09-18 22:42:01
【问题描述】:

我编写了一个脚本,在 Excel 文档中搜索“X”,当它找到“X”时,它会将与“X”关联的第一列和第一行复制到 CSV 文件中。

有人告诉我,使用“if”语句可以更好地做到这一点。不太确定如何。

代码如下:

 import xlrd
 import csv

 ###Grab the data from sheet 1
 def get_row_values(workSheet, row):
    to_return = []
     num_cells = myWorksheet.ncols - 1
    curr_cell = -1
    while curr_cell < num_cells:
        curr_cell += 1
        cell_value = myWorksheet.cell_value(row, curr_cell)
        to_return.append(cell_value)
     return to_return

 file_path = 'foo.xlsx'
 output = []

 #Write the data
 myWorkbook = xlrd.open_workbook(file_path)
 myWorksheet = myWorkbook.sheet_by_name('foosheet')
 num_rows = myWorksheet.nrows - 1
 curr_row = 0
 column_names = get_row_values(myWorksheet, curr_row)
 #print("TOTAL ENTRIES:") 
 #print len(column_names)
 #print("-----")
 framework_name = myWorksheet.cell(0,2)
 framework_version = myWorksheet.cell(0,3)
 while curr_row < num_rows:
        curr_row += 1 
        row = myWorksheet.row(curr_row)
        this_row = get_row_values(myWorksheet, curr_row)
        x = 0
        while x <len(this_row):
            if this_row[x] == 'x':
                output.append(['', fooname, foo_version, 
 foo_names[x], foo_row[0]])
                myData = [["foo1", "foo2", 
 "foo3", "foo4", "foo5"]]

                myFile = open('./results/barTemp.csv', 'w')
                with myFile:
                        writer = csv.writer(myFile)
                        writer.writerows(myData)
                        writer.writerows(output)

            x += 1

 #print output



 myFile.close()
 myWorkbook.release_resources()

【问题讨论】:

  • 似乎更有可能是某个地方出现了误传,您应该使用for,而不是if。用if 替换while 几乎没有意义,除非你使用while 非常错误。
  • 工作表对象是否有行迭代器?你在用什么图书馆?什么是 num_rows?什么是 get_row_values?我之所以这么问,是因为我觉得您展示的代码中至少有 25% 是多余的。
  • 应该this_row[0]this_row[x]
  • 我已经开始输入整个代码。很高兴收到任何反馈。

标签: python excel python-2.7 csv


【解决方案1】:

它不一定更好。仍然是相同的运行时复杂度。

不同之处在于更紧凑的线条:

例如,你可以改变

而 x

对于 this_row 中的 x:

但我看到您使用“x”索引来查找 column_names[x],因此另一种方法可能会更好,例如

for x in range(len(this_row)):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2017-03-26
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多