[프로그래밍 언어]/python

두근두근 파이썬(개정판)_ch11 파일

우당탕탕 개발 일지 2024. 1. 28. 06:46

안녕하세요. 우당탕탕 개발 일지입니다.

파이썬 에디터 IDLE 3.12.1을 사용합니다.

책과 수업 내용을 바탕으로 요약한 내용과 교재 뒤 연습문제입니다.

 

  • 파일의 필요성 
  • 파일모드
  • 그외 

 

1. 파일의 필요성

  • 메모리:컴퓨터의 전원이 꺼지지면 객체가 사라진다.
  • 하드디스크: 파일 형태로 저장하면 전원이 꺼지더라도 데이터가 보존된다.

2. 파일모드

 

교수님이 처음에 이 단원을 배울 때 그런 질문을 하셨습니다.

"여러분 코끼리를 냉자고에 넣는 방법이 뭐죠?"

"냉장고 문을 열고 코끼리를 넣고 냉장고 문을 닫는 겁니다."

 

파일도 마찬가지 입니다. 파일을 열고 작업하고 파일을 닫는 것입니다.

두근두근 파이썬(개정판)

 

 

★ 파일을 불러올 때는 파일이 존재해야 하고 불러오고 싶은 파일의 이름을 알아야 합니다.

두근두근 파이썬(개정판)

※ .close()를 안해도 가끔 동작하는 경우가 있는데

그건 그저 운이 좋아서 돌아가는 것임으로 .close()는 꼭 해주어야 합니다.

 

파일모드 모드 이름 설명
“r” read mode 파일을 처음부터 읽는다.
“w” write mode 파일을 처음부터 쓴다.
    (파일이 없으면 →생성)
    (파일이 있으면 →기존 내용 삭제)
“a” append mode 파일의 끝에 쓴다.
    (파일이 없으면 →생성)
“r+” read&write mode 파일을 읽고 쓸 수 있다.

 

 

 

그외 

 

Entry.get()

:엔트리 위젯에 데이터를 읽어올 때 사용한다.

 

import pickle

일반적인 텍스트 파일이 아닌 리스트나 클래스 같은 자료형을 저장하거나 불러올 수 있게 해준다.

 

 


연습문제 ch11-5

infile=open("data.txt","r")
outfile=open("output.txt","w")

total=0
ave=0
for line in infile:
    line=line.rstrip()
    total+=float(line)



ave=float(total/5)

outfile.write(f"합계={total}\n")
outfile.write(f"평균={ave:2f}")

infile.close()
outfile.close()

 

 


연습문제 ch11-7

from tkinter import*
import pickle
window=Tk()
window.geometry("300x200")

w1=Frame(window)
w1.pack(expand=True)
w2=Frame(window)
w2.pack(expand=True)
w3=Frame(window)
w3.pack(expand=True, pady=20)

l1=Label(w1, text="이름:")
l1.pack(side=LEFT)
e1=Entry(w1)
e1.pack(side=RIGHT)

l2=Label(w2, text="전화번호:")
l2.pack(side=LEFT)
e2=Entry(w2)
e2.pack(side=RIGHT)


phonebook={}
fname="phone_book.dat"
phone=" "
name=" "



def add():
    phone_file =open(fname, "w")
    pickle.dump(phonebook, phone_file)
    phone_file.close()

    name=e1.get()
    phone=e2.get()

    if name and phone:
        phonebook[name]=phone
        print("name,phone이 추가 되었습니다")
        

def frist():
    infile=open(fname,"rb")
    phonebook=pickle.load(infile)
    infile.close()
   
    global state
    state=0
    pl=list(phonebook)
    
    e1.delete(0,END)
    e1.insert(0,pl[state])
    
    e2.delete(0,END)
    e2.insert(0,phonebook[pl[state]])
        
    
    
    
def next_():
    global state
    state +=1
    pl=list(phonebook)
    
    e1.delete(0,END)
    e1.insert(0,pl[state])
    
    e2.delete(0,END)
    e2.insert(0,phonebook[pl[state]])
        

    
def before():
    global state
    state-=1
    pl=list(phonebook)
    
    e1.delete(0,END)
    e1.insert(0,pl[state])
    
    e2.delete(0,END)
    e2.insert(0,phonebook[pl[state]])
        

    
def last():
    global state
    state=-1
    pl=list(phonebook)
    
    e1.delete(0,END)
    e1.insert(0,pl[state])
    
    e2.delete(0,END)
    e2.insert(0,phonebook[pl[state]])
        


def rf():
    infile=open(fname,"rb")
    phonebook=pickle.load(infile)
    print(phonebook)
    infile.close()
        


b1=Button(w3, text="추가", command=add)
b2=Button(w3, text="처음", command=frist)
b3=Button(w3, text="다음", command=next_)
b4=Button(w3, text="이전", command=before)
b5=Button(w3, text="마지막", command=last)
b6=Button(w3, text="파일 읽기", command=rf)

b1.pack(side=LEFT, expand=True)
b2.pack(side=LEFT, expand=True)
b3.pack(side=LEFT, expand=True)
b4.pack(side=LEFT ,expand=True)
b5.pack(side=LEFT, expand=True)
b6.pack(side=LEFT, expand=True)

window.mainloop()
728x90