인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박주현님의 프로필 이미지
박주현

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

[응용] 엑셀문서 값을 필드에 입력하기

엑셀의 2행에서 7행의 데이터를 다루는데 for row in range(2, 8): 으로 해야하는 이유는?

해결된 질문

작성

·

33

·

수정됨

1

2-4. [응용] 엑셀문서 값을 필드에 입력하기 관련입니다.

 

강의 내용 중 for문 안에 ws.Range를 넣어, 엑셀문서의 모든 행을 출력해보는 내용이 있습니다.

여기서 다루는 엑셀의 데이터는 아래와 같습니다.

image.png

 

여기서 다루는 범위는 2행(마크, 남 ...)부터 7행(슬아, 여, ...)이므로,

for row in range(2,7):
이라고 해야 맞는 게 아닌가 싶은데,

for row in range(2,7):
로 해보면 아래와 같이 원하는 결과가 아닙니다.
실제 7행인 ['리사', '여', '1969년 11월 7일', '게임'] 가 빠진 결과가 나옵니다.

for row in range(2,7):
    data = list(
        ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]
    )
    data[2] = data[2].strftime("%Y년 %#m월 %#d일")
    print(data)
    
['마크', '남', '1984년 5월 14일', 'VR']
['빌', '남', '1955년 10월 28일', '기부']
['일론', '남', '1971년 6월 28일', '트위터']
['제프', '남', '1964년 1월 12일', '독서']
['리사', '여', '1969년 11월 7일', '게임']

 

반면에,

for row in range(2,8):
이라고 해야만 아래와 같이 엑셀의 2행부터 7행의 데이터가 원하는대로 출력이 됩니다.

for row in range(2,8):
    data = list(
        ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]
    )
    data[2] = data[2].strftime("%Y년 %#m월 %#d일")
    print(data)
    
['마크', '남', '1984년 5월 14일', 'VR']
['빌', '남', '1955년 10월 28일', '기부']
['일론', '남', '1971년 6월 28일', '트위터']
['제프', '남', '1964년 1월 12일', '독서']
['리사', '여', '1969년 11월 7일', '게임']
['슬아', '여', '1983년 6월 16일', '쇼핑']

 

2행부터 7행의 데이터를 출력하는데 왜
for row in range(2,8): 로 하는 것이 맞는 것인지 궁금합니다.

 

답변 1

2

일코님의 프로필 이미지
일코
지식공유자

마지막 정수는 포함하지 않습니다. 2~7까지 포함하려면 range(2, 8)을 써야 합니다.

range(2, 8)은 2 이상 8 미만의 정수라는 의미가 됩니다.

파이썬 문법이 그렇습니다^^; 파이썬 뿐만 아니라 자바나 C도 동일합니다.

(사실 저도 아직까지 헷갈리는 부분이기도 합니다.)

 

박주현님의 프로필 이미지
박주현
질문자

아, 그런 이유가 있었군요. 감사합니다!

박주현님의 프로필 이미지
박주현

작성한 질문수

질문하기