파일 열기, 닫기
파일 읽기/쓰기를 하기 전에는 open 함수로 파일을 열어서 파일 객체를 얻어야 한다. 그다음에 파일 읽기/쓰기 작업이 끝났다면 반드시 close로 파일 객체를 닫는다.# 파일을 사용한 뒤 자동으로 파일 객체를 닫아줌 with open(파일이름, 파일모드) as 파일객체: 코드
파일객체 = open(파일이름, 파일모드)
파일객체.write('문자열')
파일객체.close()
file = open('hello.txt', 'w') # hello.txt 파일을 쓰기 모드(w)로 열기. 파일 객체 반환
file.write('Hello, world!') # 파일에 문자열 저장
file.close() # 파일 객체 닫기
# 코드를 작성한 파일이 들어가있는 폴더에 해당 파일(hello.txt)가 생성되어
#.write()로 작성한 문자열이 저장되어있다.
변수 = 파일객체.read()
with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기
s = file.read() # 파일에서 문자열 읽기
print(s)
# 해당 파일을 읽고 저장된 문자열을 읽어 변수 s에 저장. Shell창에 s의 내용 출력
with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기
for i in range(3):
file.write('Hello, world! {0}\n'.format(i))
hello.txt 파일 내용 :
Hello, world! 0
Hello, world! 1
Hello, world! 2
파일객체.writelines(문자열리스트)
writelines는 리스트에 들어있는 문자열을 파일에 쓴다. writelines를 사용할 때는 반드시 리스트의 각 문자열 끝에 개행 문자 \n을 붙여주어야 한다. 그렇지 않으면 문자열이 모두 한 줄로 붙어서 저장된다.
lines = ['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n']
with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기
file.writelines(lines)
hello.txt 파일 내용 :
안녕하세요.
파이썬
코딩 도장입니다.
변수 = 파일객체.readlines()
read는 파일의 내용을 읽어서 문자열로 가져오지만 readlines는 파일의 내용을 한 줄씩 리스트 형태로 가져온다.
with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기
lines = file.readlines()
print(lines)
# 실행 결과
# ['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n']
변수 = 파일객체.readline()
readline으로 파일을 읽을 때는 while 반복문을 활용해야 한다. 왜냐하면 파일에 문자열이 몇 줄이나 있는지 모르기 때문이다.
readline은 더 이상 읽을 줄이 없을 때는 빈 문자열을 반환한다. 이를 이용해 while 조건문은 변수 != ''로 지정하고 변수를 미리 None으로 초기화해준다.
with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기
line = None # 변수 line을 None으로 초기화
while line != '':
line = file.readline()
print(line.strip('\n')) # 파일에서 읽어온 문자열에서 \n 삭제하여 출력
# 실행 결과
#안녕하세요.
#파이썬
#코딩 도장입니다.
for 반복문에 파일 객체를 지정하여 줄 단위로 파일의 내용을 읽는다.
with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기
for line in file: # for에 파일 객체를 지정하면 파일의 내용을 한 줄씩 읽어서 변수에 저장함
print(line.strip('\n')) # 파일에서 읽어온 문자열에서 \n 삭제하여 출력
# 실행 결과는 위의 readline()과 동일
파일 객체는 이터레이터다. 따라서 변수 여러 개에 저장하는 언패킹(unpacking)도 가능하다. 대신 할당할 변수의 개수와 파일에 저장된 문자열의 줄 수가 일치해야 한다.
파이썬 객체를 파일에 저장하는 과정을 피클링(pickling)이라고 하고, 파일에서 객체를 읽어오는 과정을 언피클링(unpickling)이라 한다.
import pickle
name = 'james'
age = 17
address = '서울시 서초구 반포동'
scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}
with open('james.p', 'wb') as file: # james.p 파일을 바이너리 쓰기 모드(wb)로 열기
pickle.dump(name, file)
pickle.dump(age, file)
pickle.dump(address, file)
pickle.dump(scores, file)
실행하면 .py 파일이 있는 폴더에 james.p 파일이 생성된다. pickle.dump로 객체(값)를 저장할 때는 open('james.p', 'wb')와 같이 파일 모드를 'wb'로 지정해야 한다. b는 바이너리(binary)를 뜻하는데, 바이너리 파일은 컴퓨터가 처리하는 파일 형식이다. 따라서 메모장 같은 텍스트 편집기로 열어도 사람이 알아보기 어렵다. 텍스트(.txt)파일은 사람이 알아보기 쉽게 만든 파일 형식이다.
import pickle
with open('james.p', 'rb') as file: # james.p 파일을 바이너리 읽기 모드(rb)로 열기
name = pickle.load(file)
age = pickle.load(file)
address = pickle.load(file)
scores = pickle.load(file)
print(name)
print(age)
print(address)
print(scores)
#실행 결과
james
17
서울시 서초구 반포동
{'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}