在openpyxl中查看行值
View row values in openpyxl
在 python 的 csv 模块中,有一个名为 csv.reader
的函数,它允许您迭代一行,returns 一个 reader 对象并且可以是像列表一样保存在容器中。
所以当列表赋值给一个变量并被打印时,即:
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 中没有看到类似的功能。我可能弄错了,所以我想知道你们是否可以帮助我。
更新
@alecxe,您的解决方案完美无缺(除了将我的出生日期转换为日期时间格式而不是常规字符串)。
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()
可能有类似的意义:
Returns a squared range based on the range_string parameter, using
generators. If no range is passed, will iterate over all cells in the
worksheet
>>> 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)
基本上,我为所有数据创建了一个列表。
然后,我遍历工作表中的每一行。
一行中的每个 cell.value
都被添加到短期列表(当前行)中。
将行内的所有 cell.values
添加到短期列表后,短期列表将添加到长期列表。
from openpyxl import load_workbook
import os
os.chdir('C:/Users/Eswar_pc/Downloads')
wb = load_workbook('Synonyms.xlsx')
sheet = wb['Sheet1']
corpus = []
e = sheet.iter_rows()
cells = list(e)
for i in cells:
corpus.append(i[0].value)
print(corpus[1:30])
在 python 的 csv 模块中,有一个名为 csv.reader
的函数,它允许您迭代一行,returns 一个 reader 对象并且可以是像列表一样保存在容器中。
所以当列表赋值给一个变量并被打印时,即:
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 中没有看到类似的功能。我可能弄错了,所以我想知道你们是否可以帮助我。
更新
@alecxe,您的解决方案完美无缺(除了将我的出生日期转换为日期时间格式而不是常规字符串)。
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()
可能有类似的意义:
Returns a squared range based on the range_string parameter, using generators. If no range is passed, will iterate over all cells in the worksheet
>>> 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)
基本上,我为所有数据创建了一个列表。
然后,我遍历工作表中的每一行。
一行中的每个 cell.value
都被添加到短期列表(当前行)中。
将行内的所有 cell.values
添加到短期列表后,短期列表将添加到长期列表。
from openpyxl import load_workbook
import os
os.chdir('C:/Users/Eswar_pc/Downloads')
wb = load_workbook('Synonyms.xlsx')
sheet = wb['Sheet1']
corpus = []
e = sheet.iter_rows()
cells = list(e)
for i in cells:
corpus.append(i[0].value)
print(corpus[1:30])