【发布时间】: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