본문 바로가기

나도코딩 파이썬

[나도코딩 파이썬기초(7) 파일 입출력 (파이썬 상에서 파일만들기, 피클(pickle), with로 빠르게 파일 여러개 만들기)

파일 입출력

파이썬 상에서 새로운 파일을 만들 수 있다.

score_file = open ("score.txt", "w", encoding="utf8")

 

score.txt = 파일명

"w" = 쓰기 목적

encoding = "utf8" ... 한글을 쓸 때는 항상 쓰는 것을 추천.

 

print("수학 : 0", file=score_file)

=> string으로 입력해준 파일명이 아닌 변수명으로 입력해주어야한다.

 

score_file.close() ... 항상 닫는 것까지!!

 

이렇게 새로운 txt 파일이 생성된 것을 확인할 수 있다.

print()를 실행해도 터미널에는 출력되지 않는다.

 

생성된 파일에 추가로 입력하기

"w"로 쓰면 해당 파일에 덮어쓰기가 된다.

 

따라서 "a"(append)로 뒤에 내용을 추가해준다.

encoding = "utf8" 은 그대로 똑같이 붙여준다.

 

여기선 print()가 아닌

score_file.write() 안에 string을 적어준다.

 

print()와 다르게 별도 줄바꿈이 없으므로

\n 으로 줄바꿈을 해준다.

 

마찬가지로 score_file.close()로 닫아준다.

 

잘 출력된 것을 확인할 수 있다.

 

생성된 파일 읽어오기

"w" 는 쓰기

"a" 는 추가하기

"r" 은 읽기이다.

 

전체 다 읽어오려면

score_file.read()로 불러올 수 있다.

 

마찬가지로 .close()로 닫아주어야한다.

 

score.txt 파일을 잘 불러온다.

 

한 줄 씩 읽기

.readline()

한 줄 씩 읽고 커서를 다음 줄로 넘긴다.

 

이렇게 줄 바꿈이 저절로 이루어진다.

 

줄바꿈을 원하지 않는다면 다음과 같이

end = ""를 입력해준다.

본문과 같이 출력된다.

 

반복문을 통해 파일을 읽기

while True: ... break가 나오기 전까지는 무한루프

line = score_file.readline()

 

바로 readline()를 실행하는 것이 아니라

변수로 함수를 지정해주고,

 

if not line:

줄이 없으면 바로 break로 종료

 

print(line)

줄이 있으면 print()로 출력해준다.

 

이 때도 .close()로 닫아주어야 한다.

 

리스트에 값을 넣어서 처리하는 방법

위에서 while 문으로 한 줄씩 읽어왔다면

이번에는 for 문으로 읽어온다.

 

lines = score_file.readlines() 

realine 은 한 줄씩 불러오는 것이라면

readlines는 리스트(list) 형태로 저장한다.

 

그리고 이 것을 for 문을 통해

하나하나 불러올 수 있다.

 

for line in lines:

print(line, end="")

 

for 문 다음에 오는 line은

리스트 안의 각 인자를 line이라는 이름을 붙여준다.

 

readline과 마찬가지로 줄을 띄어쓰므로

end=""로 바로 다음줄에 출력되게 할 수 있다.

 

.close()로 닫아주는건 이제 기본!!

 

pickle

데이터를 파일형태로 저장하는 라이브러리

 

먼저 profile_file 이라는 변수를 생성,

open("profile.pickle", "wb")

 

여기서 profile.pickle은 파일명

wb 는 쓰기전용인데 반드시 b를 붙여야한다.

 

profile = { : , ... } ... 딕셔너리를 생성해준다.

 

pickle.dump(profile, profile_file) ... profile 변수에서 생성된 dictionary를 오픈된 피클파일에 저장한다.

 

마찬가지로 .close()로 닫아준다.

 

pickle에서 데이터 가져오기

"rb" ... r이 아니라 binary라는 의미의 b를 붙여주어야 한다. 피클에서는!

 

.load(profile_file)

위에서 저장한 딕셔너리를 profile이라는 변수에 새로 불러온다.

 

with

지금까지는 파일을 열고, 처리를 하고, 닫는 과정이 필요했는데

with를 사용하면 더 빠르게 실행할 수 있다.

 

close를 해줄 필요도 없고, 간단하다.

 

 

퀴즈

 

1트만에 성공~~
for i in range(1,51):
    with open ("{0}주차.txt".format(i),"w", encoding="utf8") as document_file:
        document_file.write('''
        --- {0}주차 주간보고---
        부서 :
        이름 :
        업무요약 :
        '''.format(i))
정답

정답에서는

format(i)가 아니라 str(i)로 바로 넣어줬다.