참고자료:https://wikidocs.net/26
04-3 파일 읽고 쓰기
`[동영상 강의]` : [점프 투 파이썬 04-3 파일 읽고 쓰기](https://www.youtube.com/watch?v=rG4kna_UnTY&list=PLGSQkvB9T6r…
wikidocs.net
# 파일 읽고 쓰기
# 파일 생성하기
# newfile.py
f = open("새파일.txt", 'w')
f.close()
# 파일_객체 = open(파일_이름, 파일_열기_모드)
파일열기모드 | 설명 |
r | 읽기 모드: 파일을 읽기만 할 때 사용한다. |
w | 쓰기 모드: 파일에 내용을 쓸 때 사용한다. |
a | 추가 모드: 파일의 마지막에 새로운 내용을 추가할 때 사용한다. |
# newfile2.py
f = open("C:/doit/새파일.txt", 'w')
f.close()
# 파일을 쓰기 모드로 열어 내용 쓰기
# write_data.py
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
# 위 프로그램을 다음과 비교해 보자.
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
print(data)
# 두 프로그램의 다른 점은 data를 출력하는 방법이다. 첫 번째는 모니터 화면 대신 파일에 데이터를 적는 방법, 두 번째는 우리가 계속 사용해 왔던 모니터 화면에 데이터를 출력하는 방법이다. 두 방법의 차이점은 print 함수 대신 파일 객체 f의 write 함수를 사용한 것 말고는 없으므로 바로 눈에 들어올 것이다.
# 글씨가 깨지는경우 encoding을 통해 한글로 지정해줘야 함.
# f = open("C:/doit/새파일.txt", 'w', encoding="UTF-8")
# 파일을 읽는 여러 가지 방법
# readline 함수 이용하기
# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
# 위는 ‘새파일.txt’ 파일을 읽기 모드로 연 후 readline()을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 예제이다. 앞에서 만든 새파일.txt 파일을 수정하거나 지우지 않았다면 위 프로그램을 실행했을 때 새파일.txt 파일의 가장 첫 번째 줄이 화면에 출력될 것이다.
# readline_all.py
f = open("C:/doit/새파일.txt", 'r')
while True:
line = f.readline()
if not line: break
print(line)
f.close()
# while True: 무한 루프 안에서 f.readline()을 사용해 파일을 계속 한 줄씩 읽어 들인다. 만약 더 이상 읽을 줄이 없으면 break를 수행한다(readline()은 더 이상 읽을 줄이 없을 경우, 빈 문자열('')을 리턴한다).
# 한 줄씩 읽어 출력할 때 줄 끝에 \n 문자가 있으므로 빈 줄도 같이 출력된다.
while True:
data = input()
if not data: break
print(data)
# 위 예는 사용자의 입력을 받아 그 내용을 출력하는 경우이다. 파일을 읽어서 출력하는 예제와 비교해 보자. 입력을 받는 방식만 다르다는 것을 바로 알 수 있을 것이다. 두 번째 예는 키보드를 사용한 입력 방법, 첫 번째 예는 파일을 사용한 입력 방법이다.
# readlines 함수 사용하기
# readlines.py
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
# 줄 바꿈(\n) 문자 제거하기
# 파일을 읽을 때 줄 끝의 줄 바꿈(\n) 문자를 제거하고 사용해야 할 경우가 많다. 다음처럼 strip 함수를 사용하면 줄 바꿈 문자를 제거할 수 있다.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
line = line.strip() # 줄 끝의 줄 바꿈 문자를 제거한다. replace('\n', '') 대체 가능
print(line)
f.close()
# read 함수 사용하기
# read.py
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
# f.read()는 파일의 내용 전체를 문자열로 리턴한다.
# 파일 객체를 for 문과 함께 사용하기
# read_for.py
f = open("C:/doit/새파일.txt", 'r')
for line in f:
print(line)
f.close()
# 파일 객체(f)는 기본적으로 위와 같이 for 문과 함께 사용하여 파일을 줄 단위로 읽을 수 있다.
# 파일에 새로운 내용 추가하기
# 쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다. 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우도 있다. 이런 경우에는 파일을 추가 모드('a')로 열면 된다. IDLE 에디터로 다음 소스 코드를 작성해 보자.
# add_data.py
f = open("C:/doit/새파일.txt",'a')
for i in range(11, 20):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
# 위는 새파일.txt 파일을 추가 모드('a')로 열고 write를 사용해서 결괏값을 기존 파일에 추가해 적는 예이다. 여기에서 추가 모드로 파일을 열었기 때문에 새파일.txt 파일이 원래 가지고 있던 내용 바로 다음부터 결괏값을 적기 시작한다.
# with 문과 함께 사용하기
f = open("foo.txt", 'w')
f.write("Life is too short, you need python")
f.close()
# 파일을 열면(open) 항상 닫아(close) 주어야 한다. 이렇게 파일을 열고 닫는 것을 자동으로 처리할 수 있다면 편리하지 않을까? 파이썬의 with 문이 바로 이런 역할을 해 준다. 다음 예는 with 문을 사용해서 위 예제를 다시 작성한 모습이다.
# file_with.py
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")
# 위와 같이 with 문을 사용하면 with 블록(with 문에 속해 있는 문장)을 벗어나는 순간, 열린 파일 객체 f가 자동으로 닫힌다.
'Data Analysis & Engineer > Python' 카테고리의 다른 글
python 입출력: 프로그램의 입출력 (0) | 2024.01.30 |
---|---|
python 입출력: 사용자 입출력 (1) | 2024.01.30 |
python 입출력: 함수 (3) | 2024.01.27 |
python 3장 되새김문제 (1) | 2024.01.25 |
python 제어문: 반복문 for (3) | 2024.01.25 |