파이썬에서 파일 입출력은 텍스트파일(txt), 바이너리 파일, CSV파일, JSON파일 등을 읽고 쓸 수 있습니다
입력 : 파일의 내용을 읽어 오는것
출력 : 파이썬 값을 os쪽으로 내보내는것
파일 열기 : 입출력

파일 쓰기

t는 생략이 가능하기 때문에 'w'는 'wt'와 같은 의미이다.
close()메서드를 반드시 써야 저장이 완료된다.


writelines를 사용하면 이스트 안에있는 값을 작성해준다.
파일 읽기

read()를 통해 읽을 수 있으며 매개변수가 없을경우 여러줄을 한꺼번에 읽어오며,
있을경우 매개변수 만큼 읽어온다.(\n까지도 하나의 문자로 판단한다.)
with문 사용하기
- 파일을 보다 안전하고 깔끔하게 다루는 방법
- 컨텍스트 매니저를 사용하여 파일을 열고, 파일 작업이 끝나면 자동으로 파일을 닫아주는 역할
- 파일을 열고나서 오류가 발생하더라도 파일을 자동으로 닫아줌
- close()를 호출하지 않아도 되므로 코드가 간결해짐

1번줄은 f = open('word.txt', 'w')와 같은 의미이고, 같은 셀을 실행시키면 with의 특징으로 쓸 때 지우고 재생성 함.
파이썬의 문법도 사용이 가능하다!
-- 지금까지 배운 내용을 이용한 문제 만들기 --

class를 사용한 내 코드
class RangeError(Exception) :
def __init__(self) :
super().__init__('다시 입력하세요!')
class Dictionary :
def __init__(self) :
self.li = []
def register(self, word, mean, lv) :
self.li.append((word,mean,lv))
print('등록 되었습니다.')
def print_dict(self) :
for i in self.li:
print(f'{i[0]} : {i[1]}(레벨{i[2]})')
def save_dict(self) :
with open('words.txt', 'wt') as f :
f.writelines(
[f'{i[j]} 'if j<2 else i[j]+'\n' for i in self.li for j in range(0,3)]
)
def load_dict(self) :
with open('words.txt', 'r') as f :
li = []
lil = f.readlines()
while True :
for i in lil :
li.append(i.replace('\n','').split(' '))
break
self.li = li
print('불러왔습니다')
print(self.li)
class Users(Dictionary):
def __call__(self) :
while True :
try :
choice = int(input('1.등록하기 2.출력하기 3.저장하기 4.불러오기 5.종료하기'))
if choice == 1 :
word = input('단어를 입력하세요 : ').strip().lower()
mean = input('뜻을 입력하세요 : ').strip()
lv = input('레벨을 입력하세요 : ').strip()
self.register(word, mean, lv)
elif choice == 2 :
self.print_dict()
elif choice == 3 :
self.save_dict()
elif choice == 4 :
self.load_dict()
elif choice == 5 :
print('프로그램을 종료합니다.')
break
else :
raise RangeError()
except RangeError as e:
print(e)
except Exception as e:
print('숫자를 입력해주세요')
user = Users()
강사님 코드 (과제로 인한 수정과 삭제도 포함하였습니다.)
wordList = []
filename = 'words.txt'
class WordService :
def insertWord(self) :
eng = input('단어를 입력하세요 : ')
kor = input('뜻을 입력하세요 : ')
lv = input('레벨을 입력하세요 : ')
word = Word(eng, kor, lv)
wordList.append(word)
print('등록 되었습니다.')
def printAll(self) :
for data in wordList :
# 객체.eng, 객체.kor, 객체.lv
print(f'{data.getEng()} : {data.getKor()} (레벨{data.getLv()})')
def saveAll(self) :
with open(filename, 'w') as f :
for data in wordList :
f.write(f'{data.getEng()}/{data.getKor()}/{data.getLv()}\n')
print('파일에 저장했습니다.')
def loadData(self) :
with open(filename, 'r') as f :
while True :
line = f.readline()
if line :
# data = ['apple', '사과', '1']
data = line.strip().split('/')
# word = Word(data[0], data[1], data[2]), wordList.append(word)
wordList.append((data[0], data[1], data[2]))
else :
break
print('데이터를 불러왔습니다')
# 수정하기
def fixData(self) :
count = 1
fixEng = input('수정할 단어를 선택하세요 : ')
for data in wordList :
if data.getEng() == fixEng :
fixKor= input(f'{fixEng}의 뜻을 입력하세요 : ')
data.setKor(fixKor)
fixLv = input(f'{fixEng}의 레벨을 입력하세요 : ')
data.setLv(fixLv)
print('수정되었습니다')
elif count == len(wordList) :
print('입력한 단어가 존재하지 않습니다')
count += 1
# 삭제하기
def delData(self) :
count = 0
delEng = input('삭제할 단어를 입력하세요 : ')
for data in wordList :
if data.getEng() == delEng :
del wordList[count]
print('데이터가 삭제되었습니다.')
count = 1
break
elif count == len(wordList) :
print('삭제할 데이터가 존재하지 않습니다.')
count += 1
class Word:
def __init__(self, eng, kor, lv=1):
self.eng = eng
self.kor = kor
self.lv = lv
def setEng(self, eng):
self.eng = eng
def getEng(self):
return self.eng
def setKor(self, kor):
self.kor = kor
def getKor(self):
return self.kor
def setLv(self, lv):
self.lv = lv
def getLv(self):
return self.lv
class Menu :
def __init__(self) :
self.wordService = WordService()
def run(self) :
while True :
try :
menu = int(input('(1.등록하기 2.출력하기 3.저장하기 4.불러오기 5.수정하기 6.삭제하기 7.종료하기) '))
if menu == 1 :
self.wordService.insertWord()
elif menu == 2 :
self.wordService.printAll()
elif menu == 3 :
self.wordService.saveAll()
elif menu == 4 :
self.wordService.loadData()
elif menu == 5 :
self.wordService.fixData()
elif menu == 6 :
self.wordService.delData()
elif menu == 7 :
print('프로그램을 종료합니다')
break
else :
print('다시 입력하세요!!')
except Exception as e :
print(e)
print('다시 입력하세요!')
user = Menu()
user.run()
'Python' 카테고리의 다른 글
| 파일 입출력 Module (2) | 2024.10.02 |
|---|---|
| Python 모듈(in Colab) (0) | 2024.10.01 |
| Python 예외처리 (0) | 2024.09.30 |
| Python 스페셜 Method (0) | 2024.09.30 |
| Python 상속 (0) | 2024.09.27 |