Python
20210110_ Python 입문8,excel, csv 외부 파일 처리
Python 외부 파일 처리_ CSV, XSL, XLSX
1. CSV 파일 읽기 및 쓰기
CSV 파일은 보통 컴마로 구분 되어 있으며 MIME 타입이라고 한다.
csv 파일을 사용하기 위해서는 csv를 import 해야 한다.(python에 보통 csv 패키지가 기본으로 있음 pip로 설치할 필요는 없음)
1) CSV 파일 읽기 코드
- 구분자가
,
인 경우(기본 list 형 반환)
import csv # 1. csv import 시켜준다. 함수 호출시 csv 까지 이름을 붙여 호출해줘야함
with open('./resource/sample1.csv', 'r') as f:
# 2. with 구문으로 csv파일을 read(읽기)모드로 open해 주며 alias를 f로 지칭
reader = csv.reader(f) # 3. reader 변수에 csv.reader함수를 통해 파일을 읽어 할당한다. (함수가 더 궁금하면 csv를 dir을 보자)
print(reader) # 4. reader 변수를 출력하자 object 코드가 뜬다.
print(dir(reader)) # 5. reader의 dir을 보자 __iter__가 있음을 확인
for c in reader: # 6. iter이므로 바로 for문에 적용
print(c) # 하나의 줄(raw)을 list 형태로 출력
- 구분자가 특정한 것인 경우(기본 list 형 반환)
with open('./resource/sample2.csv', 'r') as f:
reader = csv.reader(f, delimiter='|')
# 1. reader 함수 옵션으로 delimiter(구분문자)를 지정하여 어떻게 원소로 구분할지 지정할 수 있다.
# 2. 그 외엔 위와 같이 한다.
- dict 형으로 반환
with open('./resource/sample1.csv', 'r') as f: # 1. 이전과 똑같이 파일 open
reader = csv.DictReader(f)
# 2. DictReader 함수 사용 : 헤더(필드)랑 연결시켜서 dict 형으로 읽어옴 (헤더 가장 윗줄 반환하고 점차 한줄씩 내려감 보통 헤더에 필드를 넣는 편이라 필드값임)
for c in reader: # 3. dict 형으로 반환 된 것을 한줄씩 가져오는 것
for k, v in c.items(): # 4. 가져온 한줄을 items 함수 사용하여 key 와 values를 한번 씩 가져옴
print(k, v)
print('-----------')
2) CSV 파일 쓰기 코드
- writerow 함수
한줄씩 작성
import csv
w = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]
# 1. 쓸 내용 이중 리스트로 w에 지정
with open("./resource/sample3.csv", 'w', newline='') as f:
# 2. open의 3번째 매개변수 옵션의 기본 옵션(없을시)은 기본으로 새로운 라인이 생기면 엔터를 친다는 것. 근데 newline='' 으로 해두면 '\n' 개행이 없는 것으로 됨
wt = csv.writer(f) # 현재 csv 패키지 import 상태라서 csv 패키지 까지 찍어주고 . writer함수사용
for v in w: # 순회하면서 작성
wt.writerow(v) # writerow한줄씩 작성하고 작성하면서 개행은 자동으로 들어감
- writerows 함수
순회 안하고 모두 한번에 작성
import csv
w = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]
with open("./resource/sample4.csv", 'w', newline='') as f:
wt = csv.writer(f)
wt.writerows(w) # 한번에 작성
2. 엑셀(Xlsx,Xsl) 등의 파일 처리
1) 엑셀 파일 처리를 위한 환경설정
엑셀 처리하는 오픈 소스는 openpyxl, xlweriter, xlrd, xlwt, xlutils 등이 있다.
주로 pandas를 사용한다.(openpyxl, xlrd를 내부적으로 사용하기 때문)
환경설정
일단 가상환경 터미널(activate 된 cmd)에서 pip install xlrd, pip install openpyxl , pip install pandas 하면 됨
2) 환경 설정 중 VScode , Python 환경에서 pandas import error 발생
pip 를 통해서 라이브러리 3개를 설치하고 pandas를 import 하였으나 계속 padas를 못찾는 에러가 발생했다.
분명히 install 도 잘되었고 파일도 존재하는데 찾질 못한다. (패키지 이름까지 불러줘도 못찾음)
알고 보니 vscode가 에러가 난듯 하다. 그래서 해당 사이트에서 설명하고 있는 url을 통해 패치 파일을 적용했다.
VScode 에러 패치 파일 <- 클릭 (나는 64 비트에 맞게 다운로드 했다.)
설치하고 다시시작 하니 import가 된다. 역시 구글링!
3. 엑셀 파일 읽기
- pandas의 read_excel함수의 옵션(filename, sheet_name, header, names, index_col, usecols, dtype, skiprows, nrows, na_values, thousands)
- sheet_name: 0, 1, 2 .. (시트 인덱스), list 형으로 가능
[0,"sheet2"]
- header : 필드가 어디 있는가 지정 기본값은 첫번째 줄 None = 첫번째 줄 부터 바로 데이터 받음
- names : 헤더가 none 일 경우 열의 이름을 지정 해줌
- skiprows : 엑셀 읽을때 첫줄로 부터 몇줄 건너뛸지 지정
- nrow : 몇줄 읽을지 지정
import pandas as pd # 1. pandas import 하고 pd로 alias줌
xlsx = pd.read_excel('./resource/sample.xlsx') # 2. xlsx 변수에 pd의 read_exel 함수를 이용하여 파일을 반환하였다. 약간 open 함수를 포함하는 느낌이다.
상위 데이터 확인 :
xlsx.head()
하위 데이터 확인 :
xlsx.tail()
데이터 행,열 모양 확인 :
xlsx.shape()
4. 엑셀 파일 쓰기
xlsx = pd.read_excel('./resource/sample.xlsx')
xlsx.to_excel('./resource/result.xlsx', index=False) # index 옵션은 다시 쓰여진 파일에 인덱스를 넣을지 말지
# sample 파일을 읽어서 result 엑셀 파일로 작성
xlsx.to_csv('./resource/result.xlsx', index=False)
# sample 파일을 읽어서 result CSV 파일로 작성
'Python' 카테고리의 다른 글
20210113_ Python 입문10(총 활용), 간단한 타이핑 게임 (0) | 2021.01.13 |
---|---|
20210111_ Python 입문9, 데이터베이스 연동(SQLite) (0) | 2021.01.12 |
20210109_ Python 입문7, txt파일 읽기 쓰기, 에러 예외 처리 (0) | 2021.01.09 |
20210108_ Python 입문6, 클래스(class), 클래스의 상속, 모듈(module)과 패키지(pakage) (0) | 2021.01.09 |
20210107_ Python 입문5, 함수,*args,**kwargs, parameter hint, lambda (0) | 2021.01.07 |