[20211021] 제로베이스 알고리즘 자료구조 51일 대비반 DAY 09
junh0328 opened this issue · 0 comments
junh0328 commented
다양한 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,))