我有一些以前使用python csv module处理.csv文件的代码。因为我们的原始资料实际上是Excel,所以如果我们可以直接在.xlsx文件上工作,它将容易很多,因此我发现openpyxl并开始使用它-看起来它应该可以满足我们的要求。
以前,我们有一个简单/标准的代码块,它使用csv.reader和islice一次抓取一行并为每行分配一堆值:
with open(csvfile) as f:
reader = csv.reader(f, dialect='excel')
for row in islice(reader, 28,29):
[ifile, in_time, dur, day, sess, flight, dive] = row
csv.reader函数以字符串列表的形式返回每一行,这是程序的其余部分期望的(在这种情况下)我的本地行变量。但是,Openpyxl似乎想要返回一个生成器(这很有意义):我可以简单地使用该生成器,将所有值转换为字符串,将这些字符串附加到临时列表中,然后将所有原始变量分配给中的元素该临时列表。但是在我看来,应该有一种更优雅的方式-在整个python演出中我是新手,但是似乎总有一种更清洁的方式来做这样的事情。
wb = openpyxl.load_workbook('tunnel.xlsx')
sheet = wb.active
for row in sheet.iter_rows(min_row=2, min_col=1, max_row=4, max_col=7):
# build a temporary list to store the actual cell values
my_cell_values = []
for cell in row:
my_cell_values.append(str(cell.value))
[ifile, in_time, dur, day, sess, flight, dive] = my_cell_values
建议在这里表示赞赏。这样就可以很好地工作,但是对我来说看起来并不“正确”