python 파일 읽고 쓰기(입출력)

Ohyuchan·2023년 7월 21일
0
post-thumbnail

파일 읽고 쓰기


우리는 이 책에서 이제까지 값을 ‘입력’ 받을 때는 사용자가 직접 입력하는 방식을 사용했고 ‘출력’할 때는 모니터 화면에 결괏값을 출력하는 방식을 사용했다. 하지만 입출력 방법이 꼭 이것만 있는 것은 아니다.

이번에는 파일을 통한 입출력 방법에 대해 알아보자. 여기에서는 파일을 새로 만든 다음 프로그램이 만든 결괏값을 새 파일에 적어 본다.

파일 생성하기


다음 코드를 IDLE 에디터로 작성하여 실행해 보자.

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

프로그램을 실행한 디렉터리에 새로운 파일이 하나 생성된 것을 확인할 수 있을 것이다. 파일을 생성하기 위해 파이썬 내장 함수 open을 사용했다. open 함수는 다음과 같이 ‘파일 이름’과 ‘파일 열기 모드’를 입력값으로 받고 결괏값으로 파일 객체를 리턴한다.

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

파일 열기 모드에는 다음과 같은 것들이 있다.

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

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

만약 ‘새파일.txt’ 파일을 C:/doit 디렉터리에 생성하고 싶다면 다음과 같이 작성해야 한다.

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

위 예에서 f.close()는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 사실 이 문장은 생략해도 된다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아 주기 때문이다. 하지만 close()를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.

파일을 쓰기 모드로 열어 내용 쓰기


위 예에서는 파일을 쓰기 모드로 열기만 했을 뿐, 정작 아무것도 쓰지는 않았다. 이번에는 문자열 데이터를 파일에 직접 써 보자.

# write_data.py
f = open("C:/doit/새파일.txt", 'w')
for iin range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

위 프로그램을 다음과 비교해 보자.

for iin range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    print(data)

두 프로그램의 다른 점은 data를 출력하는 방법이다. 첫 번째는 모니터 화면 대신 파일에 데이터를 적는 방법, 두 번째는 우리가 계속 사용해 왔던 모니터 화면에 데이터를 출력하는 방법이다. 두 방법의 차이점은 print 함수 대신 파일 객체 f의 write 함수를 사용한 것 말고는 없으므로 바로 눈에 들어올 것이다.

이제 명령 프롬프트 창에서 첫 번째 예제를 실행해 보자.

C:\Users> cd C:\doit
C:\doit> python write_data.py
C:\doit>

이 프로그램을 실행한 C:/doit 디렉터리를 살펴보면 ‘새파일.txt’ 파일이 생성된 것을 볼 수 있다. 파일 안에는 어떤 내용이 담겨 있는지 확인해 보자.

파일을 읽는 여러 가지 방법


파이썬에는 파일을 읽는 방법이 여러 가지 있다. 이번에는 그 방법을 자세히 알아보자.

readline 함수 이용하기

첫 번째는 readline 함수를 사용하는 것이다. 다음 예를 살펴보자.

# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()

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

1번째 줄입니다.

만약 모든 줄을 읽어 화면에 출력하고 싶다면 다음과 같이 작성하면 된다.

# readline_all.py
f = open("C:/doit/새파일.txt", 'r')
while True:
    line = f.readline()
ifnot line:breakprint(line)
f.close()

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

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

앞의 프로그램을 다음과 비교해 보자.

while True:
    data = input()
ifnot data:breakprint(data)

위 예는 사용자의 입력을 받아 그 내용을 출력하는 경우이다. 파일을 읽어서 출력하는 예제와 비교해 보자. 입력을 받는 방식만 다르다는 것을 바로 알 수 있을 것이다. 두 번째 예는 키보드를 사용한 입력 방법, 첫 번째 예는 파일을 사용한 입력 방법이다.

readlines 함수 사용하기

두 번째 방법은 readlines 함수를 사용하는 것이다. 다음 예를 살펴보자.

# readlines.py
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for linein lines:
    print(line)
f.close()

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

profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

파일 입출력에 대해 잘 설명되어 있네요. 코드 예시까지 있어서 이해하기 더 쉬웠습니다. 파이썬으로 파일을 다루는 방법에 대해 좋은 지식을 얻었습니다. 글 잘 읽었습니다!

답글 달기