programing

openpyxl에서 행 값 보기

powerit 2023. 8. 26. 12:26
반응형

openpyxl에서 행 값 보기

python의 csv 모듈에는 다음과 같은 함수가 있습니다.csv.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에서 이와 유사한 기능을 볼 수 없습니다.제가 잘못 알고 있을 수도 있어서 도와주실 분이 있는지 궁금합니다.

갱신하다

@알렉세, 당신의 솔루션은 완벽하게 작동합니다(단, 제 생년월일을 일반 문자열 대신 날짜 형식으로 캐스팅하는 것은 제외).

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)

기본적으로, 저는 모든 데이터에 대한 목록을 만들었습니다.그런 다음 워크시트의 각 행을 반복했습니다.각각cell.value행 내가 단기 목록(현재 행)에 추가되었습니다.일단 모든 것이cell.values행 내에서 단기 목록에 추가되고 단기 목록이 장기 목록에 추가됩니다.

지정된 파일 경로를 사용하여 워크시트를 로드하고 워크시트를 선택한 후 다음을 사용하여 각 행을 수집하기 위해 목록 이해도를 사용할 수 있습니다.ws.iter_rows그리고 그것에 가치를 제공합니다.values_only=True각 셀의 을 포함하는 Excel 파일의 각 행에 대한 튜플을 반환합니다.그런 다음 이 튜플을 목록으로 변환하여 2차원 목록을 반환할 수 있습니다.

import openpyxl as opxl

# load the workbook
wb = opxl.load_workbook(file_path)
# choose the worksheet from the excel file
# you may choose the currently active sheet
ws = wb.active
# you may choose to specify a sheet
ws = wb["example_sheet"]

# return a list of lists, each sub list within the
# 2-dimensional list being a record from within the excel file.
return [list(r) for r in ws.iter_rows(values_only=True)]

예를 들어 CSV가 아닌 Excel 파일을 처리할 때 사용한 코드를 들 수 있습니다. 하지만 프로세스는 비슷할 수도 있습니다.

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])

언급URL : https://stackoverflow.com/questions/31236998/view-row-values-in-openpyxl

반응형