반응형
라이브러리를 이용하여 엑셀 데이터 읽기
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. 파일 저장하기
반응형
'Backend > Python' 카테고리의 다른 글
WebDriver & Selenium 모든 팝업창 닫기 (1) | 2020.05.01 |
---|---|
ftp 업로드 후 파일 사이즈 0 (ftp upload file size 0) (2) | 2019.12.07 |
유니코드 인코딩 쉽게 (0) | 2019.11.21 |
pip 패키지 설치 안될 때 python -m pip install mitmproxy (0) | 2019.04.29 |
증감, 캐스팅(형변환), 비교식, 논리식 (0) | 2018.11.30 |