Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.
사용자 예외 클래스는 반드시 Exception 클래스를 상속받아야 한다.
# 1. 암호 길이가 5미만인 경우
class PasswordLengthShortException(Exception):
def __init__(self,n):
super().__init__(f'{n} : 길이 5미만!')
# 2. 암호 길이가 10을 초과하는 경우
class PasswordLengthLongException(Exception):
def __init__(self,n):
super().__init__(f'{n} : 길이 10초과!')
# 3. 암호가 잘못된 경우
class PasswordWrongException(Exception):
def __init__(self,n):
super().__init__(f'{n} 잘못된 비밀번호!')
password = input('input admin password: ')
try:
if len(password) < 5:
raise PasswordLengthShortException(password)
elif len(password) > 10:
raise PasswordLengthLongException(password)
elif password != 'admin1234':
raise PasswordWrongException(password)
elif password == 'admin1234':
print('빙고!')
except PasswordLengthShortException as e1:
print(e1)
except PasswordLengthLongException as e2:
print(e2)
except PasswordWrongException as e3:
print(e3)
open(), read(), write(), close() 를 이용해서 텍스트 파일을 다룰 수 있다.
file = open('디렉토리명', 'w')
strCnt = file.write('블라블라') # 반환값은 쓴 문자의 개수다
print(f'strCnt : {strCnt}')
file.close() # 반드시 닫아줘야 됨.
예제 코드# 시스템 시간과 일정을 텍스트 파일에 작성해보자.
import time
lt = time.localtime()
dateStr = '[' + str(lt.tm_year) + '년 ' +\
str(lt.tm_mon) + '월 ' +\
str(lt.tm_mday) + '일]'
toDo = input('오늘 일정: ')
file = open("디렉토리", 'w')
file.write(dateStr + toDo)
file.close()
💎 잠깐 알고가기 💎
dateStr = '[' + time.strftime('%Y-%M-%d %H:%M:%S %p') + ']' # %p는 AM/PM 을 나타낸다.
예제 코드
new = open('디렉토리명', 'w')
new.write('~~')
new.close()
# 기존 파일을 일단 읽어온다음에
new = open('디렉토리명', 'r')
forChange = new.read()
forChange = forChange.replace('Python','파이썬') # 모든 'Python'을 '파이썬'으로 변경해준다.
new.close()
❗️만약 전체를 바꾸는 것이 아니라 특정 개수만 바꿔주고 싶다면 다음과 같이 replace()를 사용한다.
str.replace('바꾸기 전 문자','바꿀 문자',개수)
w, a, x, r 정도가 있다.
예제 코드
url = '저장할 디렉토리'
def writePrimeNumber(n):
file = open(url + 'prime_numbers.txt', 'a')
file.write(str(n))
file.write('\n')
file.close()
inputNumber = int(input('0보다 큰 정수 입력: '))
for num in range(2, (inputNumber + 1)): # 2부터 입력한 정수까지의 숫자까지 돌면서
flag = True
for i in range(2,num): # 2 ~ (자기자신 - 1)의 값 중 하나라도 나누어떨어지는 숫자가 있다면
if num % i == 0:
flag = False
break
if flag == True: # 2 ~ (자기자신 - 1)의 값 중 나누어떨어지는 숫자가 하나도 없다면
writePrimeNumber(num)
with ~ as 문을 사용하면 파일 닫기(close)를 생략할 수 있다.
🔻 아래와 같이 쓰인다.
uri = '디렉토리'
with open(uri + '파일이름.txt', 'a') as f:
f.write('python study!!')
with open(uri + '파일이름.txt', 'r') as f:
print(f.read())
예제 코드
import random
rNums = random.sample(range(1,46), 7) # 1 ~ 46까지의 번호중에 7개를 랜덤하게 추출 -> 리스트에
print(f'rNums : {rNums}')
def writeNumbers(nums):
for idx, num in enumerate(nums):
with open(uri + '파일이름', 'a') as f:
if idx < (len(nums) - 2):
f.write(str(num) + ', ')
elif idx == (len(nums) - 2):
f.write(str(num))
elif idx == (len(nums) - 1):
f.write('\n')
f.write('bonus: ' + str(num))
f.write('\n')
writeNumbers(rNums)
writelines()
리스트 또는 튜플 데이터를 파일에 쓰기 위한 함수다
❗️하지만 그냥 writelines() 만 해주면 개행이 되지 않는 상태로 써진다. 개행을 하고 싶다면 아래와 같이 해준다.
with open(uri + '파일이름.txt', 'a') as f:
f.writelines(item + '\n' for item in laguages)
➡️ 즉, writelines() 안에 for문을 넣어줘서 각 원소마다 개행문자를 붙여주면 된다.
예제 코드
scoreDic = {'kor':85, 'eng':90, 'mat':92, 'sci':79, 'his':82}
uri = '파일 디렉토리'
for key in scoreDic.keys(): # key 값들만 포함된 리스트
with open(uri + '파일이름.txt', 'a') as f:
f.writelines(key + '\t: ' + str(scoreDic[key]) + '\n')
❗️ 딕셔너리나 리스트 모양 그대로 출력하고 싶다면 아래와 같이 해준다.
scoreDic = {'kor':85, 'eng':90, 'mat':92, 'sci':79, 'his':82}
with open(uri + '파일이름2.txt', 'a') as f:
print(scoreDic, file=f)
- readlines() : 파일의 모든 데이터를 읽어서 리스트 형태로 반환
- readline() : 한 행만 읽어서 문자열 형태로 반환
▶️ readline() 의 경우, while 이나 for문을 이용해서 한 행씩 읽어들일 수 있다.
예제 코드
scoreDic = {}
uri = '파일디렉토리'
with open(uri + '파일 이름.txt', 'r') as f: # 이미 파일에 과목별 점수가 있다고 하고
line = f.readline()
while line != '': # line 을 모두 읽어들일때까지 반복
tempList = line.split(':') # ':' 를 기준으로 분리해서 리스트에 저장
scoreDic[tempList[0]] = int(tempList[1].strip('\n')) # '\n'을 삭제해주고 정수형으로 value 값 저장
line = f.readline()
print(f'scoreDic: {scoreDic}')
이제까지 파이썬의 중급 문법들을 다뤄봤다. 다음 시간부터는 본격적으로 중급 문제 풀이를 정리해보도록 하겠다