본문으로 바로가기
반응형

라이브러리를 이용하여 엑셀 데이터 읽기


1. 라이브러리 임포트

import xlrd, datetime


xlrd가 엑셀 파일을 읽을 때 사용하는 라이브러리이며 datetime은 엑셀에서 시간 데이터의 포멧을 맞추기 위해 사용함


2. 파일 읽기

wb = xlrd.open_workbook("C:/Users/ohtae/Desktop/test.xlsx")



3. 시트 설정 및 행, 열 총 합 개수 추출

ws = wb.sheet_by_index(0# 0부터 
ncol = ws.ncols # 행
nlow = ws.nrows # 열



4. 값 추출

for j in range(1, nlow): # 열 만큼 반복문
    i = 0 # 행 위치
    values = ''
    while i < ncol: # 행 반복
        if i == 7 or i == 8 or i == 9 or i == 10 or i == 14 or i == 15:
            values += "'" + str(datetime.datetime(*xlrd.xldate_as_tuple(int(ws.row_values(j)[i]), wb.datemode))) + "', "
        elif i == 0:
            values += "'" + str(int(ws.row_values(j)[i])) + "', "
        elif i == 2 or i == 16 or i == 17 or i == 19 or i == 20 or i == 21:
            values += "'" + str(ws.row_values(j)[i]) + "', "
        elif i == 12 or i == 13 or i == 24:
            values += "'" + str(ws.row_values(j)[i])[:-2+ "', "
        else:
            values += "'" + ws.row_values(j)[i] + "', "
        i += 1



엑셀에서 데이터 타입이 시간인 경우 파이썬에서 데이터를 읽자마자 print 해보면 32425.453 같은 float 형 숫자가 나온다.

이를 시간처럼 읽기 위해 datetime 라이브러리를 이용하며 xlrd에서는 xldate_as_tuple 이라는 메서드를 사용한다.

여기서 중요한 점은 wb.datemode인데 datemode가 xlrd로 파일을 읽어 들인 핸들러여야한다.

(글쓴이는 시트 핸들러로 자꾸 설정했다가 왜 안되는지 구글링 뻘짓했다.. ㅎ 오타 조심)


str(datetime.datetime(*xlrd.xldate_as_tuple(int(ws.row_values(j)[i]), wb.datemode)))



그리고 기본적으로 값을 추출하고 난 후에 문자열과 결합하고 싶으면 str로 캐스팅이 필요하다.


숫자인 경우 int로 먼저 캐스팅하고 다시 str로 캐스팅을 하면된다.





아래는 다음에 기회가되면 수정 ㅎ

5. 값 쓰기

6. 파일 저장하기


반응형