파일 입출력
1. 파일 열고 쓰기
파일을 생성하고 열기위해서 내장함수인 open을 사용한다.
f = open("새파일.txt", 'w')
파일 열기 모드에는 다음과 같이 있다.
r : 읽기 모드(디폴트)
w : 쓰기 모드
a : 쓰기 + 이어쓰기 모드
+ : 읽기 + 쓰기 모드
b : 바이너리 모드
t : 텍스트 모드(디폴트)
파일을 열고 작성한 이후에는 f.close()를 통해서 열려있는 파일 객체를 닫아준다. 사실 파이썬은 프로그램 종료시 열려있는 파일 객체를 자동으로 닫아주기 때문에 생략해도 되지만 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문에 닫아주는 것이 좋다.
파일에 문자열을 쓰기 위해서는 write() 함수를 사용한다
f = open('경로/파일명', 'w')
for i in range(10):
data = '%d번째 줄입니다.\n'%i
f.write(data)
f.close()
2. 외부 파일 읽기
외부 파일을 읽는 함수는 여러가지가 있다.
1) readline() : 파일의 첫번째 줄을 읽어서 출력
readline을 통해서 전체 파일을 읽고 싶으면 다음과 같이 작성하면 된다.
f = open("경로/파일명", 'r')
while True:
line = f.readline()
if not line: break
print(line)
f.close()
무한루프 안에서 readline이 더이상 읽을 줄이 없을 경우 빈문자열을 리턴하여서 break를 수행한다.
2) readlines() : 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다.
f = open("경로/파일명", 'r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
3) read() : 파일 내용 전체를 문자열로 돌려준다.
f = open("경로/파일명", 'r')
data = f.read()
print(data)
f.close()
3. with문과 함께 사용
파일을 열면 항상 close를 해주는 편이 좋지만 이 방법은 다소 귀찮다. 파이썬에서는 자동으로 close처리를 해주는 with문을 제공한다.
with open("경로/파일명", "w") as f:
f.write("Life is too short, you need python")
코드가 한결 간편해진 것을 알 수 있다.
4. pickle
문자열의 경우에는 위와 같은 방법으로 쉽게 파일 입출력 처리를 할 수 있다. 하지만 리스트나 클래스 등을 저장하고 싶을 때는 어떻게 해야할까? 이를 쉽게 도와주는 것이 pickle라는 모듈이다.
import pickle
colors = ['red', 'green', 'black']
with open('경로/파일명', 'wb') as f:
pickle.dump(colors, f)
import pickle
colors = ['red', 'green', 'black']
with open('경로/파일명', 'rb') as f:
cc = pickle.load(f)
cc #['red', 'green', 'black']
위와 같이 읽을 때는 쓸 때는 dump, 읽을 때는 load를 이용하면 쉽게 입출력을 할 수 있다.
그리고 pickle로 파일을 쓰거나 읽을 때는 반드시 바이너리 모드로 파일을 열어야 한다. 그렇지 않으면 에러가 발생한다. pickle로 저장할 수 있는 대상은 파이썬 객체라면 기본 자료형은 물론이고 사용자가 정의한 클래스 객체까지 거의 모두 가능하다.
참고
2. 참고 서적 - 빠르게 활용하는 파이썬 3.6 프로그래밍