首页 > 解决方案 > 从openpyxl中获取一行值的最干净的方法?

问题描述

我有一些以前使用python csv 模块处理 .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

建议在这里表示赞赏。它以这种方式工作得很好,但对我来说它并不“看起来正确”

标签: pythoniteratorgeneratoropenpyxl

解决方案


推荐阅读