[Python] 파일 읽고 쓰기

미남로그·2021년 10월 17일
0
post-thumbnail

4장 정리

1️⃣ 함수
2️⃣ 입력과 출력
3️⃣ 파일 읽고 쓰기
4️⃣ 연습 문제

1. 파일 생성하기

f = open("새파일.txt", 'w')
f.close()

파일을 생성하기 위해 우리는 파이썬 내장 함수 open을 사용했다. open 함수는 다음과 같이 "파일 이름"과 "파일 열기 모드"를 입력값으로 받고 결괏값으로 파일 객체를 돌려준다.

파일 객체 = open(파일 이름, 파일 열기 모드)

파일 열기 모드설명
r읽기 모드 - 파일을 읽기만 할 때 사용
w쓰기 모드 - 파일에 내용을 쓸 때 사용
a추가 모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다. 위 예에서는 디렉터리에 파일이 없는 상태에서 새파일.txt를 쓰기 모드인 'w'로 열었기 때문에 새파일.txt라는 이름의 새로운 파일이 현재 디렉터리에 생성되는 것이다.

만약 새파일.txt 파일을 C:/doit 디렉터리에 생성하고 싶다면?

f = open("C:/doit/새파일.txt", 'w')
f.close()

아무 것도 없는 새 파일이 생성된다. f.close()는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 쓰기 모드로 열었던 파일을 닫아 주지 않으면 오류가 발생한다.

2. 파일을 쓰기 모드로 열어 출력값 적기

f = open("새파일.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)

3. 프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

1) readline 함수 이용하기

f = open("새파일.txt", 'r')
line = f.readline()
print(line)
f.close()

1번째 줄입니다.

위 예는 f.open("새파일.txt", 'r')로 파일을 읽기 모드로 연 후 readline()을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 경우이다. 앞에서 만든 새파일.txt를 수정하거나 지우지 않았다면 위 프로그램을 실행했을 때 새파일.txt의 가장 첫 번째 줄이 화면에 출력될 것이다.

f = open('새파일.txt', 'r')
while True:
	line = f.readline()
    	if not line: break
        print(linee)
f.close()

즉 while True: 무한 루프 안에서 f.readline()을 사용해 파일을 계속해서 한 줄씩 읽어 들인다. 만약 더 이상 읽을 줄이 없으면 break를 수행한다(readline()은 더 이상 읽을 줄이 없을 경우 빈 문자열('')을 리턴한다).

※ 한 줄 씩 읽어 출력할 때 줄 끝에 \n 문자가 있으므로 빈 줄도 같이 출력된다.

while True:
	data = input()
    	if not data: break
        print(data)

아무 입력값을 넣지 않으면(enter누를 시) while문에서 탈출한다.

2) readlines 함수 사용하기

f = open('새파일.txt', 'r')
lines = f.realines()
for line in lines:
	print(line)
f.close()

readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다. 따라서 위 예에서 lines는 리스트 ["1 번째 줄입니다.\n", "2 번째 줄입니다.\n", ..., "10 번째 줄입니다.\n"]가 된다. f.readlines()에서 f.readline()과는 달리 s가 하나 더 붙어 있음에 유의하자.

3) read 함수 사용하기

f = open('새파일.txt', 'a')
data = f.read()
print(data)
f.close()

f.read()는 파일의 내용 전체를 문자열로 돌려준다. 따라서 위 예의 data는 파일의 전체 내용이다.

4. 파일에 새로운 내용 추가하기

쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다. 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우도 있다. 이런 경우에는 파일을 추가 모드('a')로 열면 된다. 에디터를 켜고 다음 소스 코드를 작성해 보자.

f = open('새파일.txt', 'a')
for i in range(11, 20):
	data = '%d번째 줄입니다. \n' % i)
    f.write(data)
f.close()

위 예는 새파일.txt 파일을 추가 모드('a')로 열고 write를 사용해서 결괏값을 기존 파일에 추가해 적는 예이다. 여기에서 추가 모드로 파일을 열었기 때문에 새파일.txt 파일이 원래 가지고 있던 내용 바로 다음부터 결괏값을 적기 시작한다.

5. with문과 함께 사용하기

f = open('foo.txt',  'w')
f.write('life is too short, you need python')
f.close()

파일을 열면 위와 같이 항상 close해 주는 것이 좋다. 하지만 이렇게 파일을 열고 닫는 것을 자동으로 처리할 수 있다면 편리하지 않을까? 파이썬의 with문이 바로 이런 역할을 해준다.

위 예시와 똑같이 적으면

with open('foo.txt', 'w') as f:
	f.write('life is too short, you need python')

위와 같이 with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close되어 편리하다.

profile
미남이 귀엽죠

0개의 댓글