[요약] 파이썬(Python) - 엑셀(Excel)/CSV 파일 읽기 쓰기
엑셀을 위한 파이썬 라이브러리 설치
# pip install xlrd
# pip install openpyxl
# pip install pandas
** Microsoft Visual Studio Code를 이용하여 편집할 경우 다음과 같은 문제가 발생했다.
pandas 설치 후 pip list 로 확인 했을 때에는 "pandas" 모듈이 설치 된것으로 보이는데
파이썬 파일 실행시 "ModuleNotFoundError: No module named 'pandas'" 오류가
"import pandas as pd" 라인에서 발생하는 경우가 있다
pandas가 설치 되어 있는데 ModuleNotFoundError: No module named 'pandas' 오류로 pandas 모듈이 import되지 않을 때 처리 방법
python 소스 경로의 scripts 디렉토리에서 activate된 상태의 command창에서
pip를 이용하여 Module을 실행할 경우에 "pandas" 모듈을 찾지 못하는 경우가 발생한다.
이때에는 새로운 command창(도스창)을 새로 열어서 위 명령을 실행하면 정상적을 pandas 모듈을 인식한다.
엑셀 및 CSV 파일을 읽고 쓰기 위한 실용 코드 예제
# 파이썬 외부파일 처리 # 엑셀(Excel), CSV파일 처리(읽기 및 쓰기) # Excel파일의 형식 # XLS, XLSX # 엑셀 사용을 위한 패키지설치 # CSV : MIME Type - text/csv # CSV파일의 필드 구분자는 기본이 콤마:"," 이지만 다른 문자를 사용할 수 있다 # 예제1) import csv with open('./resource/excel_sample1.csv', 'r', encoding='UTF-8') as f: # reader = csv.reader(f) # 기본 구분자를 ","로 인식해서 불러옴 # reader = csv.reader(f, delimiter = '|') # 기본 구분자를 "|"로 인식해서 불러옴 reader = csv.reader(f, delimiter = ',') # Header 스킵(첫번째 라인을 헤더로 본다는 의미) - 한 번 더 써주면 2줄을 헤더로 봄 # next(reader) # 확인 print(reader) print(type(reader)) print(dir(reader)) for c in reader : print(c) ''' result ['요청번호', '고유번호', '상태', '날짜'] ['20200404000000000001', '11462006005046', '9', '2020-04-04 09:48:23'] ['20200404000000000002', '11031996512638', '9', '2020-04-04 09:56:36'] ['20200404000000000004', '11032002006183', '9', '2020-04-04 11:00:04'] ['20200404000000000005', '11012011007537', '9', '2020-04-04 11:10:54'] ['20200404000000000006', '11502008000933', '9', '2020-04-04 11:16:39'] ''' # 예제2) 사전 형식 출력 with open('./resource/excel_sample2.csv', 'r', encoding='UTF-8') as f: reader = csv.DictReader(f) for c in reader: print(c) ''' result OrderedDict([('요청번호', '20200404000000000001'), ('고유번호', '11462006005046')]) OrderedDict([('요청번호', '20200404000000000002'), ('고유번호', '11031996512638')]) OrderedDict([('요청번호', '20200404000000000003'), ('고유번호', '11031996537746')]) OrderedDict([('요청번호', '20200404000000000004'), ('고유번호', '11032002006183')]) OrderedDict([('요청번호', '20200404000000000005'), ('고유번호', '11012011007537')]) OrderedDict([('요청번호', '20200404000000000006'), ('고유번호', '11502008000933')]) ''' print('--------------------------------------') # 예제3) Key Value 방식 출력 with open('./resource/excel_sample1.csv', 'r', encoding='UTF-8') as f: reader = csv.DictReader(f) for c in reader: for k, v in c.items(): print(k, v) ''' result 요청번호 20200404000000000001 고유번호 11462006005046 상태 9 날짜 2020-04-04 09:48:23 요청번호 20200404000000000002 고유번호 11031996512638 상태 9 날짜 2020-04-04 09:56:36 요청번호 20200404000000000003 고유번호 11031996537746 상태 9 날짜 2020-04-04 10:02:12 요청번호 20200404000000000004 고유번호 11032002006183 상태 9 날짜 2020-04-04 11:00:04 요청번호 20200404000000000005 고유번호 11012011007537 상태 9 날짜 2020-04-04 11:10:54 요청번호 20200404000000000006 고유번호 11502008000933 상태 9 날짜 2020-04-04 11:16:39 ''' # 예제4) CSV 파일로 데이터 쓰기 w = [[1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15], [16,17,18]] with open('./resource/excel_sample3.csv', 'w', encoding='UTF-8', newline='') as f: # newline=''을 해주지 않으면 개행문자가 두개씩 들어간다. # wt.riterow할 때 한번 LF # 기본 쓰기 동작할 때 한번 LF > 이동작은 newline=''를 해 줌으로써 방지할 수 있다. wt = csv.writer(f) for v in w: wt.writerow(v) print('wrote w to ./resource/excel_sample3.csv') ''' result in excel_sample3.csv 1,2,3 4,5,6 7,8,9 10,11,12 13,14,15 16,17,18 ''' # 예5) for문 없이 한 번에 쓰는 동작(writerows 사용) with open('./resource/excel_sample4.csv', 'w', encoding='UTF-8', newline='') as f: wt = csv.writer(f) wt.writerows(w) print("---------------------------") ######## EXCEL (XLS, XLSX) ################### # 엘셀을 다루기 위한 라이브러리 # openpyxl, xlsxwrite, xlrd, xlwt, xlutils # pandas : 주로 사용(openxyl + xlrd) # 설치 (중요, pandas 설치) # windows 한경에서는 scripts에서 activate된 상태의 command 창에서 다음과 같이 실행 # pip install xlrd # pip install openpyxl # pip install pandas # 윈도우 환경에서 pandas Module을 인식하지 못하는 현상이 발생 할 수 있다. # pip list 하면 pandas라는 모듈이 설치되어있다고 리스트업 되는데 실제로 다음과 같은 오류가 발생할 수 있다. # ModuleNotFoundError: No module named 'pandas' # 이때는 activate된 scripts 디렉토리 말고 도스창(command)을 하나 더 열어서 pip를 이용해 # 공통 모듈로 설치하면 인식된다. # option # sheetname='시트명' 또는 숫자, header=숫자, skiprow=숫자 import pandas as pd xlsx = pd.read_excel('./resource/sample.xlsx') # 상위 데이터 확인 print(xlsx.head()) print() ''' head()함수는 상위 5개의 row를 보여준다 SN ISN STATUS SID 기관명 기사제목 언론사 0 115316 413856 1 7229 문화재청-국립문화재연구소 국립중원문화재연구소 [문화재의 뒤안길]원주 노회신 벽화묘…조선에도 벽화가? 서울경제 1 117634 416174 1 19862 한국산업기술협회 [회원사 소식] 현대제철, 업계 최초로 형강·철근 GR 인증 획득 헤럴드경제 2 117635 416175 1 19862 한국산업기술협회 [회원사 소식] 부산환경공단, 도로 위 미세먼지 60% 이상 제거해 부산일보 3 117636 416176 1 19862 한국산업기술협회 [회원사 소식] 화재보험협회, ESS 자동소화시스템 연구 주관기관 선정 헤럴드경제 4 117637 416177 1 19862 한국산업기술협회 [회원사 소식] 아이씨케이, 신사업 ‘셀피’ 글로벌 카드사 인증 획득 이투데이 ''' # 데이터 확인 print(xlsx.tail()) ''' tail()함수는 하위 5개의 row를 보여준다 SN ISN STATUS SID 기관명 기사제목 언론사 14 118872 417412 1 9022 부산벤처기업협회 [아시아경제] `부산벤처인`들은 부지런함도 계획도 다 있었다 아시아경제 15 118874 417414 1 9022 부산벤처기업협회 [부산일보] 경제력 갖춘 뉴 시니어 등장, 100세 시대의 기회로 부산일보 16 118879 417419 1 9022 부산벤처기업협회 [전자신문] 오승이에스, 반려동물 스마트액자 개발 전자신문 17 119805 418345 1 12921 [병원]강남동강 병원 [경상일보] 무더운 한여름날 ‘뇌졸중 주의보’ 경상일보 18 119821 418361 1 2220 동양물산기업 [아시아경제]농어촌公, 10개 中企와 동반성장 협약 체결... 아시아경제 ''' # 데이터확인(행과 열수 확인) print(xlsx.shape) # (19, 7) 총 행의 수(19)와 열의 수(7)을 확인할 수 있다. # 엑셀 데이터 쓰기 # csv로 쓰기 xlsx.to_excel('./resource/result.xlsx', index=False) # CP949로 쓸때 Excel에서 열면 한글이 정상 xlsx.to_csv('./resource/result_cp949.csv', index=False, encoding="CP949") # UTF-8로 쓰면 TextEditor에서 보면 한글이 정상인데, 엑셀에서 보면 깨짐 xlsx.to_csv('./resource/result_utf8.csv', index=False, encoding="CP949")
'프로그래밍 > Python' 카테고리의 다른 글
[요약] 파이썬(Python) SQLite - 테이블조회 (0) | 2020.12.07 |
---|---|
[요약] 파이썬(Python) SQLite DB 연동 (0) | 2020.12.07 |
[요약] 파이썬(Python) - 예외처리(Exception) (0) | 2020.12.02 |
[요약] 파이썬(Python) - 파일 읽기 / 쓰기 (0) | 2020.11.30 |
[요약] 파이썬(Python) - 모듈과 패키지 개념 이해 (0) | 2020.11.29 |