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
'programing' 카테고리의 다른 글
NSUser 기본값으로 배열을 저장하고 읽는 방법을 신속하게 선택할 수 있습니까? (0) | 2023.08.26 |
---|---|
Swift에서 설정할 배열 축소 (0) | 2023.08.26 |
cPanel - MariaDB - 다중 데이터베이스의 업데이트 필드 (0) | 2023.08.26 |
Python에 mariadb 1.1.3 패키지 설치 (0) | 2023.08.26 |
R 내에서 Excel 시트 범위를 사진으로 내보내는 방법 (0) | 2023.08.26 |