10 excel, csv 파일 읽기, 쓰기

10 excel, csv 파일 읽기, 쓰기

CSV : MIME - text/csv 타입 csv를 제어하려면 아래처럼 import 해야한다.

import csv # 기본 제공

예제1

# open으로 파일을 열때 인코딩 타입 정해주려면 세 번째 인자로 넣어준다.
with open('./resource/sample1.csv', 'r', encoding='euc-kr') as f:
    reader = csv.reader(f)
    next(reader) # Header 스킵 - 라인 스킵한다 보면 됨
    # 확인
    print(reader)
    print(type(reader))
    print(dir(reader))
    # 메소드 속성 확인, __iter__가 있으면 순회 가능한 것이니 for 돌려볼 수 있다.
    print()

    for c in reader:
        print(c)

예제2

csv 구분자는 대부분 ,(콤마)로 되어있는데, 가끔 |같은 문자로 구분될 때도 있다. 이때는 reader()함수에 delimiter키워드로 구분자를 지정해준다.

with open('./resource/sample2.csv', 'r', encoding='euc-kr') as f:
    reader = csv.reader(f, delimiter='|') # 구분자 정해주는 키워드
    next(reader) # Header 스킵 - 라인 스킵한다 보면 됨
    # 확인
    print(reader)
    print(type(reader))
    print(dir(reader))
    # 메소드 속성 확인, __iter__가 있으면 순회 가능한 것이니 for 돌려보면 좋
    print()

    for c in reader:
        print(c)

예제3 (Dict변환)

with open('./resource/sample1.csv', 'r', encoding='euc-kr') as f:
    reader = csv.DictReader(f)

    for c in reader:
        for k, v in c.items():
            print(k, v)
        print('----------')

예제4 - 쓰기

w = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]

with open('./resource/sample3.csv', 'w', newline='') as f: # newline으로 개행 제거
    wt = csv.writer(f)
    for v in w: # if문 같은 거 쓸 때 활
        wt.writerow(v)

예제5

with open('./resource/sample4.csv', 'w', newline='') as f:
# newline으로 개행 제거
    wt = csv.writer(f)
    wt.writerows(w) # 한번에 다 입용력

# XSL, XLSX
# openpyxl, xlsxwriter, xlrd, xlwt, xlutils
# pandas 를 주로 사용(openpyxl, xlrd 같이)
# pip install xlrd
# pip install openpyxl
# pip install pandas

import pandas as pd

# sheetname='시트명' 또는 숫자, header=숫자(몇번째를 헤더로 정할), skiprow=숫자(몇번째 행은 안가져올지)
xlsx = pd.read_excel('./resource/sample.xlsx')

# 상위 데이터 확인
print(xlsx.head()) # 다섯개 보여줌
print()

# 데이터 확인
print(xlsx.tail()) # 끝에 다섯개 보여줌

# 데이터 확인
print(xlsx.shape) # 행, 열 반

# 엑셀 or CSV 다시 쓰기
xlsx.to_excel('./resource/result.xlsx', index=False)
xlsx.to_csv('./resource/result.csv', index=False)