'''
try :
예외발생 코드
except 예외처리클래스 as 변수:
예외처리 코드
finally :
항상 실행 코드
'''
# (1) 예외 발생 코드
print('프로그램 시작 !!!')
x = [10, 30, 25.2,'num', 14, 51]
for i in x :
print(i)
y = i**2 # 예외 발생 type(s) for ** or pow(): 'str' and 'int'
print('y =', y)
print('프로그램 종료')
프로그램 시작 !!! 10 y = 100 30 y = 900 25.2 y = 635.04 num
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-1-ecb7c3b0ae75> in <module> 5 for i in x : 6 print(i) ----> 7 y = i**2 # 예외 발생 type(s) for ** or pow(): 'str' and 'int' 8 print('y =', y) 9 TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
# (2) 예외 처리 코드
print('프로그램 시작 !!!')
for i in x :
try :
y = i**2 # 예외 발생 type(s) for ** or pow(): 'str' and 'int'
print('i=', i, ', y =', y)
except : # except Exception as e :
print('숫자 아님 : ', i)
print('프로그램 종료')
프로그램 시작 !!! i= 10 , y = 100 i= 30 , y = 900 i= 25.2 , y = 635.04 숫자 아님 : num i= 14 , y = 196 i= 51 , y = 2601 프로그램 종료
import builtins
#print(dir(builtins))
# 유형별 예외처리
print('\n유형별 예외처리 ')
try :
div = 1000 / 2.53
print('div = %5.2f' %(div)) # 정상
#div = 1000 / 0 # 1차 - 산술적 예외
f = open('c:\\test.txt') # 2차 - 파일 열기
num = int(input('숫자 입력 : ')) # 3차 - 기타 예외
print('num =', num)
# 다중 예외처리 클래스
except ZeroDivisionError as e:
print('오류 정보 :', e) # 오류 정보 : division by zero
except FileNotFoundError as e:
print('오류 정보 : ', e)
except Exception as e : # 기타 예외 처리
print('오류 정보 : ', e)
'''
오류 정보 : invalid literal for int() with base 10: 'test'
10진수로 유효하지 않은 문자
'''
finally :
print('finally 영역 - 항상 실행되는 영역')
유형별 예외처리 div = 395.26 오류 정보 : [Errno 2] No such file or directory: 'c:\\test.txt' finally 영역 - 항상 실행되는 영역
import os
#print(os.getcwd()) # 현재 경로 확인
# 1. 파일 입출력
try :
# 1. 파일 읽기 : 현재 경로 = project 경로
print('\n현재 경로 :', os.getcwd()) # 현재 경로
ftest1 = open('chapter08/data/ftest.txt', mode = 'r') # / or \\
print(ftest1.read()) # 파일 전체 읽기
print(type(ftest1.read()))
# 2. 파일 쓰기(자동 생성)
ftest2 = open('chapter08/data/ftest2.txt', mode = 'w')
ftest2.write('my first text~~~') # 파일 쓰기
# 3. 파일 쓰기(내용 추가)
ftest3 = open('chapter08/data/ftest2.txt', mode = 'a')
ftest3.write('\nmy second text ~~~') # 파일 쓰기(추가)
except Exception as e:
print('Error 발생 : ', e)
finally:
# 파일 객체 닫기
ftest1.close()
ftest2.close()
ftest3.close()
현재 경로 : D:\bigdata\jupyter\mjcbook programming is fun very fun! have a good time mouse is input device keyboard is input device computer is input output system <class 'str'>
# 2. 파일 읽기 관련 함수
try :
ftest = open('chapter08/data/ftest.txt', mode='r')
# (1) read() : 전체 텍스트 자료 읽기
full_text = ftest.read()
print(full_text)
print(type(full_text))
# (2) readlines() : 줄 단위 읽기
ftest = open('chapter08/data/ftest.txt', mode='r')
lines = ftest.readlines() # 줄 단위 전체 읽기 - list 반환
print(lines) # ['my first text~~~\n', 'my second text ~~~']
print(type(lines)) # <class 'list'>
print('문단 수 :', len(lines)) # 문단 수 : 2
# file 객체 -> 줄 단위 읽기
doc = []
# string.strip() : 문장 끝 불용어 처리(공백,제어문자 제거)
for line in lines: # 'my first text~~~\n'
print(line.strip()) # text만 출력
doc.append(line.strip())
print(doc) # 문장
# (3) readline() : 한 줄 읽기
ftest = open('chapter08/data/ftest.txt', mode='r')
line = ftest.readline() # 한 줄 읽기
print(line) # ['my first text~~~\n', 'my second text ~~~']
print(type(line)) # <class 'list'>
except Exception as e:
print('Error 발생 : ', e)
finally:
# 파일 객체 닫기
ftest.close()
programming is fun very fun! have a good time mouse is input device keyboard is input device computer is input output system <class 'str'> ['programming is fun\n', 'very fun!\n', 'have a good time\n', 'mouse is input device\n', 'keyboard is input device\n', 'computer is input output system'] <class 'list'> 문단 수 : 6 programming is fun very fun! have a good time mouse is input device keyboard is input device computer is input output system ['programming is fun', 'very fun!', 'have a good time', 'mouse is input device', 'keyboard is input device', 'computer is input output system'] programming is fun <class 'str'>
# 3. with 블록과 encoding
try :
# 형식) with open(파일 입출력) as 참조변수 :
with open('chapter08/data/ftest3.txt', mode='w', encoding='utf-8') as ftest : # 한글 사용
ftest.write('파이썬 파일 작성 연습')
ftest.write('\n파이썬 파일 작성 연습2')
# with 블럭 벗어나면 자동 close
with open('chapter08/data/ftest3.txt', mode='r', encoding='utf-8') as ftest :
print(ftest.read())
except Exception as e:
print('Error 발생 : ', e)
finally:
pass
파이썬 파일 작성 연습 파이썬 파일 작성 연습2
# 1. os 모듈의 파일과 디렉터리 관련 함수
import os
# 현재 작업 디렉터리 경로
os.getcwd()
# 작업 디렉터리 변경
os.chdir('chapter08')
os.getcwd()
# 현재 작업 디렉터리 목록
os.listdir('.')
# 디렉터리 생성
os.mkdir('test')
os.listdir('.')
# 디렉터리 이동
os.chdir('test')
os.getcwd()
# 여러 디렉터리 생성
os.makedirs('test2/test3')
os.listdir('.') # ['test2']
# 디렉터리 이동
os.chdir('test2')
os.listdir('.') # ['test3']
# 디렉터리 삭제
os.rmdir('test3')
os.listdir('.') # []
# 상위 디렉터리 이동
os.chdir('../..')
os.getcwd()
# 여러 개의 디렉터리 삭제
os.removedirs('test/test2')
os.listdir('.')
# os.getcwd()
# os.chdir('chapter08')
# os.getcwd()
# os.path.abspath('lecture/step01_try_except.py')
# os.path.dirname('lecture/step01_try_except.py')
# os.path.exists('D:\\Pywork\\workspace') # True
# os.path.isfile('lecture/step01_try_except.py') # True
# os.path.isdir('lecture') # True
os.path.split("c:\\test\\test1.txt") # ('c:\\test', 'test1.txt')
# os.path.join('c:\\test', 'test1.txt') # 'c:\\test\\test1.txt'
# os.path.getsize('lecture/step01_try_except.py') # 1883 byte
('c:\\test', 'test1.txt')
*, ?, []
패턴을 이용하여 파일이나 디렉터리 검색import glob
glob.glob('chap*')
['chap01_install.ipynb', 'chap02_var_oper.ipynb', 'chap03_lf_loop.ipynb', 'chap04_data_structure.ipynb', 'chap05_function.ipynb', 'chap06_class.ipynb', 'chap08_file.ipynb', 'chapter08']
import os # dir or file path
print(os.getcwd()) # D:\Pywork\workspace
txt_data = 'chapter08/txt_data/'
# 지정한 폴더의 목록(file or dir)을 하나씩 넘김
sub_dir = os.listdir(txt_data) # movie 파일 목록 반환
print(sub_dir) # ['first', 'second']
D:\bigdata\jupyter\mjcbook ['first', 'second']
# 폴더별 파일 처리 함수
def textPro(sub_dir): # ['first', 'second']
first_txt = [] # first 디렉터리 텍스트 저장
second_txt = [] # second 디렉터리 텍스트 저장
# 디렉터리 구성
for sdir in sub_dir : # ['first', 'second']
dirname = txt_data + sdir # 'chapter08/txt_data/first'
file_list = os.listdir(dirname) # first dir 파일 목록 반환
# 파일 구성
for fname in file_list:
file_path = dirname + '/' + fname # 디렉터리/파일 or 디렉터리
# file 선택
if os.path.isfile(file_path) :
try :
file = open(file_path, 'r') # pos/cv000_29416.txt
if sdir == 'first':
first_txt.append(file.read())
else :
second_txt.append(file.read())
except Exception as e:
print('예외발생 :', e)
finally:
file.close()
else:
print(f'{file_path}는 디렉터리 ~~ 제외')
return first_txt, second_txt
first_txt, second_txt = textPro(sub_dir) # ['first', 'second']
print('first_tex 길이 =', len(first_txt)) # first_tex 길이 = 10
print('second_tex 길이 =', len(second_txt)) # second_tex 길이 = 10
chapter08/txt_data/first/test01는 디렉터리 ~~ 제외 chapter08/txt_data/first/test02는 디렉터리 ~~ 제외 chapter08/txt_data/second/test03는 디렉터리 ~~ 제외 chapter08/txt_data/second/test04는 디렉터리 ~~ 제외 first_tex 길이 = 10 second_tex 길이 = 10
# list 결합
tot_texts = first_txt + second_txt
print('tot_texts 길이=', len(tot_texts)) # tot_texts 길이= 20
tot_texts 길이= 20
#tot_texts
import pickle
# save : write binary
pfile_w = open("chapter08/data/tot_texts.pck", mode='wb')
pickle.dump(tot_texts, pfile_w)
# load : read binary
pfile_r = open("chapter08/data/tot_texts.pck", mode='rb')
tot_texts_read = pickle.load(pfile_r)
print('tot_texts 길이 =', len(tot_texts_read)) # 20
#print(type(tot_texts_read)) # <class 'list'>
#print(tot_texts_read)
tot_texts 길이 = 20
#pip install pandas