카테고리 없음

[패캠 네카라쿠배 2기] 2차 테스트 4일차 11. 외부 파일 - Excel, CSV

닉네임이 멋이 중헌디 2021. 6. 17. 20:22

11. 파이썬 외부 파일 처리 

Excel, CSV (,로 구분된 format형식 - 웹, 응용 프로그램에서 많이 사용된다) 읽기 쓰기 

 

excel, csv 처리 

CSV 읽기 // 파이썬에서는 데이터 전처리 등 데이터를 핸들링할 때 중간에 CSV로 저장하고 사용하는 경우가 많음 

CSV 쓰기 // 그러므로 CSV 읽고 쓰는 법 제대로 공부하기 

XSL, XLSX 읽기 (excel에는 이렇게 두 가지 확장자)

패키지 설치

 

#Section 11 

# 파이썬 외부 파일 처리 

# 파이썬 Excel, CSV 파일 읽기 및 쓰기 

 

# CSV: MIME - text/csv (mime형식은 text/csv파일)

 

import csv // 파이썬에서 기본으로 제공하는 패키지를 import한다

 

#예제1 - 읽기 

with open('./resource/sample1.csv', 'r') as f: // 상대경로로 외부 파일을 가져오고 read

   reader = csv.reader(f) // 만약에 파일이 ,로 나눠져 있지 않고 |로 구분이 되어 있다면 csv.reader(f, delimiter = '|') 형식으로 |를 치울 수 있다

    next(reader) // Header 스킵할 때 사용한다 (하나 쓸 때마다 한 line을 스킵한다)

 

#확인 

print(reader) // class _csv_reader로 들어가 있다 

print(dir(reader))를하면 _iter_가 있다는 것을 확인할 수 있다. 그러므로 반복문에서 사용할 수 있다. 

 

for c in reader: 

    print(c)

 

#예제3 (Dict 변환) 

with open('./resource/sample1.csv', 'r') as f: 

  reader = csv.DictReader(f) 

// 1열(header)의 값을 key로 각 열에 있는 값을 value로 취급해 (key, value)의 형태로 값을 정리한다 

for c in reader: 

 for k, v in c.items(): 

   print(k,v) // 각각의 (key, value)들이 찍힌다

 

#예제4 - 하나씩 쓰기

w = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]] // 2차원 형태의 리스트 

with open('./상대경로로 외부 파일', 'w', newline=' ') as f : // 파일 쓰기, f에 넣기 // newline으로 개행을 삭제

   wt = csv.writer(f) // 파일 쓰기

 

   for v in w: 

      wt.writerow(v) // w에서 하나씩 뽑아서 wt로 파일을 쓸 수 있는 형태로 만든 뒤 writerow로 한 줄씩 써진다 // 이때 자동으로 줄바꿈을 해주는데 위에 open할 때도 줄바꿈이 된다 그러러므로 newline=' '로 줄바꿈 멈춰! 

 

#예제5 - 한번에 다 쓰기

with open('./상대경로로 외부 파일', 'w', newline=' ') as f : 

   wt = csv.writer(f) 

   wt.writerows(w) // writerow()는 하나씩 쓰도록 하니까 for v in w로 순회하면서 쓰도록 해야한다 

                       // if문 등으로 하나하나 검수하면서 쓸 때는 writerow()로 하나씩 순회하면서 쓰도록 하는 것이 좋다 

 

 

#Excel

XSL, XLSX  

엑셀을 처리하는 오픈 소스 : openpyxl, xlsxwriter 등 

but 주로 사용하는 것은 pandas (openpyxl, xlrd)를 이 pandas가 내부적으로 사용하기 때문에 만능으로 가능

pip install xlrd설치 

pip install openpyxl 

pip install pandas

 

 

# Section11

# 파이썬 예외처리의 이해

# 파이썬 Excel, CSV 파일 읽기 및 쓰기

 

# CSV : MIME - text/csv

 

import csv

 

# 예제1

with open('./resource/sample1.csv''r'as f:

    reader = csv.reader(f)

    # next(reader) Header 스킵

    # 확인

    print(reader)

    print(type(reader))

    print(dir(reader))  # __iter__ 확인

    print()

 

    for c in reader:

        print(c)

 

# 예제2

with open('./resource/sample2.csv''r'as f:

    reader = csv.reader(fdelimiter='|')  # 구분자 선택

    # next(reader) Header 스킵

    # 확인

    print(reader)

    print(type(reader))

    print(dir(reader))  # __iter__ 확인

    print()

 

    for c in reader:

        print(c)

 

# 예제3 (Dict 변환)

with open('./resource/sample1.csv''r'as f:

    reader = csv.DictReader(f)

    # 확인

    print(reader)

    print(type(reader))

    print(dir(reader))  # __iter__ 확인

    print()

 

    for c in reader:

        for kv in c.items():

            print(kv)

        print('-----')

 

# 예제4

w = [[123], [456], [789], [101112], [131415]]

 

with open('./resource/sample3.csv''w'as f:  # newline='' 테스트

    wt = csv.writer(f)

    # dir 확인

    print(dir(wt))

    print(type(wt))

    for v in w:

        wt.writerow(v)

 

# 예제5

with open('./resource/sample3.csv''w'newline=''as f:

    wt = csv.writer(f)

    # dir 확인

    print(dir(wt))

    print(type(wt))

 

    wt.writerows(w)



# XSL, XLSX : MIME - applications/vnd.excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

# pip install pandas 설치 필요

# pip install xlrd   설치 필요

# pip install openpyxl 설치 필요

 

# openpyxl, xlsxwriter, xlrd, xlwt, xlutils 등 있으나 pandas를 주로 사용(openpyxl, xlrd) 포함

 

import pandas as pd

 

xlsx = pd.read_excel('./resource/sample.xlsx')

 # sheetname='시트명' 또는 숫자: 몇번째 시트인지 나온다, header=3 몇번째 열을 header로 할 건지 , skiprow=1  몇번째 행은 가져오지 않을지(읽기)

 

# 상위 데이터 확인 (처음부터 5개까지)

print(xlsx.head())

print()

 

# 데이터 확인(끝에서 5개까지)

print(xlsx.tail())

print()

 

# 데이터 구조(행과 열이 몇개씩인 지 확인// (20, 7)의 형태로 나온다)

print(xlsx.shape# 행, 열



# 엑셀 or CSV 다시 쓰기 

# index는 열에다가 숫자를 더해주는 것

 

xlsx.to_excel('./resource/result.xlsx'index=False

xlsx.to_csv('./resource/result.csv'index=False)