junh0328/TIL

[20211021] 제로베이스 알고리즘 자료구조 51일 대비반 DAY 09

junh0328 opened this issue · 0 comments

다양한 Exceptions 이어서

# name = ['kim', 'lee', 'park']

# try:
#     z = 'kim'
#     # z = 'shin'
#     x = name.index(z)
#     print('{} Found it! in name'.format(z, x+1))
# except:  # Error 의 종류를 적지 않으면 모든 Error가 해당 except로 들어온다
#     print('Not Found it! - Occured valueError! ')
# else:
#     print('Ok! else!')

# 예제3

# name = ['kim', 'lee', 'park']

# try:
#     z = 'kim'
#     # z = 'shin'
#     x = name.index(z)
#     print('{} Found it! in name'.format(z, x+1))
# except:  # Error 의 종류를 적지 않으면 모든 Error가 해당 except로 들어온다
#     print('Not Found it! - Occured valueError! ')
# else:
#     print('Ok! else!')
# finally:
#     print('무조건 실행!')

# 예제 4
# 예외처리는 하지 않지만, 무조건 수행되는 코딩 패턴

try:
    print('Try')
finally:
    print('OK Finally')

# 예제 5

# 에러를 계층적으로 잡기
# 가장 방대한 에러를 다루는 기본 except는 가장 마지막에 적어주는 것이 좋다

name = ['kim', 'lee', 'park']

try:
    z = 'kim'
    # z = 'shin'
    x = name.index(z)
    print('{} Found it! in name'.format(z, x+1))
except ValueError as v:
    print('Not Found it! - Occured value Error! ')
    print(v)
except IndexError:
    print('Not Found it! - Occured index Error! ')
except Exception:
    print('Not Found it! - Occured Error! ')
else:
    print('Ok! else!')
finally:
    print('무조건 실행!')

print()

# 예제 6
# 예외를 직접 방생 : raise: 일으키다
# raise 키워드로 예외 직접 발생

try:
    # a = 'Lee'
    a = 'Kim'
    if a == 'Kim':
        print('Ok 허가')
    else:  # '김'이 아닌 경우네는 ValueError를 발생시키도록 프로그램을 구현해놓음
        raise ValueError
except ValueError:
    print('문제 발생!')
except Exception as f:
    print(f)
else:  # 다 통과될 경우
    print('done')

Excel, CSV 처리

  • CSV 읽기
  • CSV 쓰기
  • XSL, XLSX 읽기
  • 패키지 설치
# 파이썬 외부 파일 처리
# 파이썬 Excel, CSV 파일 읽기 및 쓰기

# CSV : MIME - text/csv

import pandas as pd
import csv  # csv 파일을 읽기 위해서는 파이썬에서 기본 제공하는 csv 패키지를 import 해야 한다

# 예제 1
# 인코딩 에러로 인한 인코드 인수 추가 https://zephyrus1111.tistory.com/39

with open('./resource/sample1.csv', 'r', encoding='euc-kr') as f:
    reader = csv.reader(f)
    # next(reader) Header (1행) 를 스킵한다

    # 확인
    print(reader)
    print(type(reader))

    print(dir(reader))
    print()

    for v in reader:
        print(v)

# 예제 2

with open('./resource/sample2.csv', 'r', encoding='euc-kr') as f:
    # reader = csv.reader(f) 없을 때 어떻게 보여지나 확인
    # delimiter=''를 통해 어떤 구분자로 구분되고 있나 적어준다
    reader = csv.reader(f, delimiter='|')
    # next(reader) Header (1행) 를 스킵한다

    # 확인
    print(reader)
    print(type(reader))

    print(dir(reader))
    print()

    for v in reader:
        print(v)

print()

# 예제 3 (Dict변환)
# Dictionary 형태로 가져오기 {'key':'value'}

with open('./resource/sample1.csv', 'r', encoding='euc-kr') as f:
    reader = csv.DictReader(f)
    for ele in reader:
        for k, v in ele.items():
            print(k, v)
        print('-----------------')

# 예제 4 (CSV 파일 쓰기)
# 순회하며 쓰기, for 문

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', encoding='euc-kr', newline='') as f:
    # newline = '' enter가 두칸씩 들어가지 않도록 처리하겠다
    wt = csv.writer(f)

    for v in w:
        wt.writerow(v)

# 예제 5
# 한번에 쓰기 : writerows()

with open('./resource/sample4.csv', 'w', encoding='euc-kr', newline='') as f:
    wt = csv.writer(f)
    wt.writerows(w)

print()

# XSL, XLSX
# openpyxl, xlsxwriter, xlrd, xlwt, xlutils 등이 있음
# pandas 를 주로 사용(openpyxl, xlrd)
# pandas 레퍼런스 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

# 해당 폴더의 가상환경 source ./activate 에서 설치해야 한다!

# pip install xlrd
# pip install openpyxl
# pip install pandas

# import pandas as pd >>> pandas 사용하기

# option
# sheetname='시트명' 또는 숫자, header = 3, skiprow = 숫자

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

# 상위 데이터 확인 (상위 5개)
print(xlsx.head())
print()

# 꼬리 데이터 확인 (하위 5개)
print(xlsx.tail())

# 데이터 확인
print(xlsx.shape)  # 행 , 열 >>> (20, 7)

# 엑셀 or CSV 파일로 다시 쓰기

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

데이터베이스 및 테이블 생성

  • SQLite 기본 사용법
  • 테이블 생성
  • 데이터 삽입
  • 기본 SQL 사용 예제
# 파이썬 데이터베이스 연동(SQLite)
# 테이블 생성 및 삽입

import sqlite3
import datetime

# 삽입 날짜 생성
now = datetime.datetime.now()
print('now:', now)

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
print('nowDatetime:', nowDatetime)

# sqlite3
print('sqlite3.version :', sqlite3.version)
print('sqlite3.sqlite_version: ', sqlite3.sqlite_version)

# DB 생성 & Auto Commit (반영) / Rollback (되돌리기)

conn = sqlite3.connect(
    '/Users/leejunhee/FastCampus/python_basic/resource/database.db', isolation_level=None)

# Cursor

c = conn.cursor()

print('Cursor Type:', type(c))
# print('Cursor Type:', dir(c))

# 테이블 생성(Data Type: TEXT, NUMERIC, INTEGER, REAL, BLOB)
c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, email text, phone text, website text, regdate text)")

# 데이터 삽입
# ? (물음표)로 처리된 데이터는 뒤에 튜플 형식으로 추가해줘야 한다
c.execute("INSERT INTO users VALUES(1, 'LEE', 'junh0328@naver.com', '010-9170-1796', 'https://github.com/junh0328', ?)", (nowDatetime,))