查看openpyxl中的行值

在python的csv模块中,有一个叫做csv.reader的函数,它允许你迭代一行,返回一个读者对象,并且可以像列表一样容纳在一个容器中。

所以当列表分配给一个variables并被打印时,即:

 csv_rows = list(csv.reader(csvfile, delimiter=',', quotechar='|')) print (csv_rows) > > > [['First Name', 'Last Name', 'Zodicac', 'Date of birth', 'Sex'] # I gave an example of the function outputting a header row 

到目前为止,我没有在openpyxl中看到类似的function。 我可能会弄错,所以我想知道你们有没有人能帮我一把。

更新

@alecxe,你的解决scheme完美的作品(除了把我的出生date作为一个date时间格式,而不是一个普通的string)。

 def iter_rows(ws): for row in ws.iter_rows(): yield [cell.value for cell in row] > > >>> pprint(list(iter_rows(ws))) [['First Nam', 'Last Name', 'Zodicac', 'Date of birth', 'Sex'], ['John', 'Smith', 'Snake', datetime.datetime(1989, 9, 4, 0, 0), 'M']] 

由于我是初学者,我想知道如果我使用for循环而不是列表理解,这将如何工作。

所以我用这个:

 def iter_rows(ws): result=[] for row in ws.iter_rows() for cell in row: result.append(cell.value) yield result 

几乎给了我完全相同的输出,而是给了我这个:正如你可以告诉的,它实质上给了我一个巨大的列表,而不是你给我的结果中的嵌套列表。

 >>>print(list(iter_rows(ws))) [['First Nam', 'Last Name', 'Zodicac', 'Date of birth', 'Sex', 'David', 'Yao', 'Snake', datetime.datetime(1989, 9, 4, 0, 0), 'M']] 

iter_rows()可能有类似的意义:

使用生成器返回基于range_string参数的平方范围。 如果没有范围传递,将遍历工作表中的所有单元格

 >>> from openpyxl import load_workbook >>> >>> wb = load_workbook('test.xlsx') >>> ws = wb.get_sheet_by_name('Sheet1') >>> >>> pprint(list(ws.iter_rows())) [(<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>, <Cell Sheet1.D1>, <Cell Sheet1.E1>), (<Cell Sheet1.A2>, <Cell Sheet1.B2>, <Cell Sheet1.C2>, <Cell Sheet1.D2>, <Cell Sheet1.E2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>, <Cell Sheet1.C3>, <Cell Sheet1.D3>, <Cell Sheet1.E3>)] 

您可以稍微修改它以生成行值列表,例如:

 def iter_rows(ws): for row in ws.iter_rows(): yield [cell.value for cell in row] 

演示:

 >>> pprint(list(iter_rows(ws))) [[1.0, 1.0, 1.0, None, None], [2.0, 2.0, 2.0, None, None], [3.0, 3.0, 3.0, None, None]] 

我得到它使用这种方法工作:

 all_rows = [] for row in worksheet: current_row = [] for cell in row: current_row.append(cell.value) all_rows.append(current_row) 

本质上,我创build了所有数据的列表。 然后,我遍历工作表中的每一行。 行中的每个cell.value被添加到短期列表(当前行)。 一旦行内的所有cell.values被添加到短期列表中,短期列表就被添加到长期列表中。