예외 클래스를 직접 만들어보자
class NotUseZeroException(Exception):
def __init__(self, n):
super().__init__(f'{n}은(는) 사용할 수 없습니다.')#상위클래스에 있는 __init__ 메서드 선언
def divCalculator(n1, n2): #실제사용. 함수 만들기
if n2 == 0:
raise NotUseZeroException(n2)
else:
print(f'{n1} / {n2} = {n1 / n2}')
num1 = int(input('input number1: '))
num2 = int(input('input number2: '))
try:
divCalculator(num1, num2)
except NotUseZeroException as e:
print(e)
class PasswordLengthShortException(Exception):
def __init__(self, str):
super().__init__(f'{str}: 길이 5미만')
class PasswordLengthLongException(Exception):
def __init__(self, str):
super().__init__(f'{str}: 길이 10초과')
class PasswordWrongException(Exception):
def __init__(self, str):
super().__init__(f'{str}: 잘못된 비밀번호')
adminPw = input('input password: ')
try:
if len(adminPw) < 5:
raise PasswordLengthShortException(adminPw)
elif len(adminPw) > 10:
raise PasswordLengthLongException(adminPw)
elif adminPw != 'admin1234':
raise PasswordWrongException
elif adminPw == 'admin1234':
print('빙고')
except PasswordLengthShortException as e1:
print(e1)
except PasswordLengthLongException as e2:
print(e2)
except PasswordWrongException as e3:
print(e3)
실무에서 상황에 맞춰 클래스를 만들어서 많이 쓴다.
텍스트 파일을 파이썬으로 다뤄보자
텍스트 파일 - 파일열기 - 읽기 또는 쓰기 - 파일 닫기
외부자원에 대한 디렉토리를 결정해야함
open('C:/pythonTxt/test.txt', 'w')
file = open('C:/Users/User/Desktop/python_ex/pythonTxt/test.txt', 'w')
#역슬레시를 /로 바꿔줘야 한다
#만약 경로에 아무 파일도 없는데 * w모드 * 로 열면 파일을 새로 생성함
strCnt = file.write('Hello python') #기존의 글을 지우고 새로운 글로 덮어버린다
print(f'strCnt: {strCnt}')
file.close()
-->
strCnt: 12
import time
lt = time.localtime()
1) dateStr = '[' + str(lt.tm_year) + '년 ' + \
str(lt.tm_mon) + '월 ' + str(lt.tm_mday) + '일]'
2) dateStr = '[' + time.strftime('%Y-%m-%d %H:%M:%S %p') + ']'
3) dateStr = '[' + time.strftime('%Y-%m-%d %I:%M:%S %p') + ']' #I는 13시->1시
todaySchedule = input('오늘 일정: ')
file = open('C:/Users/User/Desktop/python_ex/pythonTxt/test.txt', 'w')
file.write(dateStr + todaySchedule)
file.close()
-->
1) [2023년 10월 25일]study
2) [2023-10-25 14:33:56 PM]STUDY
3) [2023-10-25 02:32:38 PM]STUDY
텍스트파일의 텍스트를 읽어보자
file = open('C:/Users/User/Desktop/python_ex/pythonTxt/test.txt', 'r')
두가지 매개변수 작성해서 열기
file = open('C:/Users/User/Desktop/python_ex/pythonTxt/test.txt', 'r')
str = file.read() #무조건 문자열로 인식함
print(f'str = {str}')
file.close()
-->
str = [2023-10-25 14:33:56 PM]STUDY
file = open('C:/Users/User/Desktop/python_ex/pythonTxt/about_python.txt', 'r')
str = file.read()
print(f'str = {str}') # 읽고
file.close() # 닫음
str = str.replace('Python', '파이썬', 2)
# = 글자 바꾸는 함수 '' 를, '' 로, 2개만 바꾸겠다, 다시 할당
print(f'str = {str}') # 단어 대체
file = open('C:/Users/User/Desktop/python_ex/pythonTxt/about_python.txt', 'w') # 다시 열기
file.write(str) # 내용 변경
file.close() # 닫기
텍스트파일을 다양한 방식으로 open 할 수 있다.
url = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
# 'w' 파일 모드
file = open(url + 'hello.txt', 'w')
file.write('hello python')
file.close
# 'a' 파일 모드
file = open(url + 'hello.txt', 'a')
file.write('\n nice to meet you')
# \n = 개행
#file.close
# 'x' 파일 모드
file = open(url + 'hello_01.txt', 'x')
file.write('\n nice to meet you') # 기존에 파일 존재하면 오류남
file.close
# 'r' 파일 모드
file = open(url + 'hello_01.txt', 'r')
str = file.read()
print(f'str = {str}')
file.close
url = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
def writePrimeNumber(n):
file = open(url + 'prime_numbers.txt', 'a')
file.write(str(n)) #숫자로 바로 쓰면 에러가 남
file.write('\n')
file.close()
inputNumber = int(input('0보다 큰 정수 입력: '))
for number in range(2, (inputNumber + 1)):
flag = True
for n in range(2, number): #중첩반복문
if number % n == 0: #소수가 아님
flag = False
break
if flag:
writePrimeNumber(number)
중첩반복문 복습해야겠다 이해 안 됨 흑ㅎㄱ
파일 닫기(close)를 생략하자
= 자동화
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
file = open(uri + '5_037.txt', 'a')
file.write('python study')
file.close
file = open(uri + '5_037.txt', 'r')
print(file.read())
file.close
->
with open(uri + '5_037.txt', 'a') as f: # 오픈된 파일을 f라 부르겠다
f.write('python study')
with open(uri + '5_037.txt', 'r') as f:
print(f.read())
import random
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
def writeNumbers(nums):
for idx, num in enumerate(nums):
with open(uri + 'lotto.txt', '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))
rNums = random.sample(range(1, 46), 7) #범위 1부터 45까지의 숫자를, 7개 뽑는다
# 나온 리스트를 변수에 할당한다
print(f'rNums: {rNums}')
writeNumbers(rNums) #함수에 넘겨줌
-->
9, 6, 27, 31, 43, 24
Bonus: 21
반복가능한 자료형의 데이터를 파일에 쓰자
languages = ['c/c++', 'java', 'c#', 'python', 'javascript']
#[] = 리스트
#() = 튜플 = 수정은 안 되지만 조회는 가능
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
for item in languages:
with open(uri + 'languages.txt', 'a') as f:
f.write(item)
f.write('\n')
-->
c/c++
java
c#
python
javascript
=
#writelines
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
with open(uri + 'languages.txt', 'a') as f:
f.writelines(item + '\n' for item in languages)
#개행 위해 ()안에 반복문적어주기
with open(uri + 'languages.txt', 'r') as f:
print(f.read())
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
scoreDic = {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
for key in scoreDic.keys():
with open(uri + 'scoreDic.txt', 'a') as f:
f.write(key + '\t:' + str(scoreDic[key]) + '\n')
# key = '문자' , scoreDic[key] = 숫자
-->
kor :85
eng :90
mat :92
sci :79
his :82
#딕셔너리 그대로 출력하려면
scoreDic = {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
with open(uri + 'scores.txt', 'a') as f:
print(scoreDic, file=f) #파일 옵션만 주면 됨
-->
{'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
# 리스트도 됨
scoreList = [85, 90, 92, 79, 82]
with open(uri + 'scoresList.txt', 'a') as f:
print(scoreList, file=f)
-->
[85, 90, 92, 79, 82]
여러 줄 읽기와 한 줄 읽기
# readlines()
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
with open(uri + 'lans.txt', 'r') as f:
lanList = f.readlines()
print(f'lanList: {lanList}')
print(f'type(lanList): {type(lanList)}')
-->
lanList: ['c/c++\n', 'java\n', 'python\n', 'javascript\n', 'R\n']
type(lanList): <class 'list'>
# readline()
with open(uri + 'lans.txt', 'r') as f:
line = f.readline()
while line != '': #비어있지않다면 반복해서 출력
print(f'line: {line}', end='')
line = f.readline() #다음행으로 가서 다시 한번 읽음
#print내부에도, line 행 끝에도 개행이 하나씩 있어서 공백이 있는 것
-->
line: c/c++
line: java
line: python
line: javascript
line: R
scoreDic = {} #최종 저장이 딕셔너리기 때문에 비어있는 걸 하나 만들어줌
uri = 'C:/Users/User/Desktop/python_ex/pythonTxt/'
with open(uri + 'scores.txt', 'r') as f:
line = f.readline()
while line != '':
tempList = line.split(':')
#split : ' '안에 들어있는 걸 구분자로 해서 리스트로 분리시켜줌
#print(f'tempList: {tempList}')
#tempList: ['kor', '85\n']
#tempList: ['eng', '90\n']
#tempList: ['mat', '92\n']
#tempList: ['sci', '79\n']
#tempList: ['his', '82']
# 이렇게 나옴
-> \n을 없애야 하고, 문자열로 인식되는 숫자를 int로 바꿔야
scoreDic[tempList[0]] \
= int(tempList[1].strip('\n'))
#scoreDic[tempList[0]] : 인덱스 0인 값이 key값 되도록
#tempList[1]:인덱스 1인 값이 value값되도록, strip = 값없애는 함수
line = f.readline()
print(f'scoreDic: {scoreDic}')
-->
scoreDic: {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}