※ 이 글은 책 「파이썬 코딩도장」의 내용을 재정리한 내용임
- 파이썬 시리즈 글 순서-> 링크
1) 파일 열기 닫기
● 파일 열고 닫기
# 파일 쓰기
file = open('hello.txt', 'w') # 파일 쓰기모드로 열기, 파일 객체
file.write('Hello, World!') # file에다가 원하는 문자열을 쓴다
file.close() # 파일을 닫는다(닫아야 파일이 저장됨!)
# 파일 읽기
file = open('hello.txt', 'r') # 파일을 읽기모드로 열기
s = file.read() # 파일에서 문자열 읽기
print(s) # Hello, world!
● 자동으로 파일 닫기
- 위 코드는 파일을 열고 닫는 코드를 따로 써줘야 했으나 아래 코드를 쓰면 자동으로 파일을 열고 닫게 할 수 있다.
with open('hello.txt','r') as file: #파일 연 상태로
s = file.read() #쓰기 or 읽기
print(s) #코드끝나면 자동으로 파일 닫힘
2) 파일 쓰기
● 문자열 여러줄 쓰기
# 반복문
with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기
for i in range(3):
file.write('Hello, world! {0}\n'.format(i))
# 파일 내용
# Hello, world! 0
# Hello, world! 1
# Hello, world! 2
# 리스트
lines = ['안녕하세요.\n', 'Py린이\n', '엘사박입니다.\n']
with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기
file.writelines(lines)
# 파일 내용
# 안녕하세요
# Py린이
# 엘사박입니다.
3) 파일 읽기
● 문자열 여러줄 읽기
# 문자열 한줄씩 읽어 리스트 요소로 저장
with open('hello.txt', 'r') as file:
lines = file.readlines()
print(lines) # ['안녕하세요.\n', 'Py린이\n', '엘사박입니다.\n']
# 문자열 한줄씩 읽어 출력
with open('hello.txt', 'r') as file:
line = None # 변수 line을 None으로 초기화
while line != '': # 해당 줄이 공백이 아니라면
line = file.readline() # 해당 줄을 읽어서 line에 저장
line = line.strip('\n')) # line에서 \n 삭제
print(line) # 파일내용
# 안녕하세요
# Py린이
# 엘사박입니다.
# for문으로 한줄씩 읽어 출력
with open('hello.txt', 'r') as file:
for line in file: # file에서 한줄씩 읽어 line에 저장
print(line.strip('\n')) # 파일에서 읽어온 문자열에서 \n 삭제하여 출력
# 파일내용
# 안녕하세요
# Py린이
# 엘사박입니다.
# 변수에 바로 저장
file = open('hello.txt', 'r')
a, b, c = file # 문자열은 이터레이터이므로 언패킹 가능
# (file의 줄 개수= 변수 개수)여야함
print(a, b, c) # ('안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n')
여기까지는 문자열을 읽고 쓰는 방법이었다.
그렇다면 딕셔너리와 같은 것을 저장할 때도 일일이 문자열로 바꿔야 하는 걸까?
파이썬 객체들을 바로 파일에 저장하는 방법은 없을까?
4) 피클링(pickling)과 언피클링(unpickling)
파이썬은 객체를 파일에 저장하는 pickle모듈을 제공한다.
파이썬 객체 -> 파일 저장의 과정은 pickling,
파일 -> 파이썬 객체 읽기의 과정은 unpickling이다.
쓸 때는 pickle.dump를, 읽을 때는 pickle.load를 사용한다.
# 파일 쓰기
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)
# 파일 읽기
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}
5) 기타 파일 모드
이 글에서는 'r'읽기모드, 'w'쓰기모드, 'rb'바이너리 읽기모드, 'wb'바이너리 쓰기모드만 썼다.
그러나 이밖에도 다양한 모드가 있다. 코딩도장 책에서 그림으로 간단히 설명하고 있으니 참고하자
대학원생이라면 xlsx, csv 파일 등을 불러와야 할 때가 많을 텐데 이것은 pandas 라이브러리로 해결할 수 있다.
pandas는 추후 다루도록 하겠다...
'Tips > Python' 카테고리의 다른 글
[Py린이를 위한 Python 기초] 9. 함수 (0) | 2023.09.01 |
---|---|
[Py린이를 위한 Python 기초] 7. 문자열 응용 (0) | 2023.03.02 |
[Py린이를 위한 Python 기초] 6. 딕셔너리 응용 (410) | 2023.02.28 |
[Py린이를 위한 Python 기초] 5. 리스트 응용 (0) | 2023.02.22 |
[Py린이를 위한 Python 기초] 4. 조건문, 반복문 (386) | 2023.02.22 |
댓글