본문 바로가기

연구노트/Python

Python 파일 읽고 쓰기

 

 

Python 파일 읽고 쓰기

 

파일 생성하기

 

이제까지 값을 '입력'받을 때는 사용자가 직접 입력하는 방식을 사용했고 '출력'할 때는 모니터 화면에 결괏값을 출력하는 방식으로

프로그래밍해 왔다. 하지만 입출력 방법이 꼭 이것만 있는 것은 아니다. 이번에는 파일을 통한 입출력 방법에 대해 알아보자.

파일생성하기

다음 소스 코드를 에디터로 작성해서 저장한 후 실행해 보자.

프로그램을 실행한 디렉터리에 새로운 파일이 하나 생성된 것을 확인할 수 있다.

## 파일 생성하기1
f = open("새파일.txt", 'w')
f.close()
 

파일을 생성하기 위해 우리는 파이썬 내장 함수 open을 사용했다.

open함수는 다음과 같이 '파일 이름'과 '파일 열기 모드'를 입력값으로 받고 결괏값으로 파일 객체를 돌려준다.

"파일 객체 = open(파일 이름, 파일 열기 모드)" 형태로 코드를 작성한다.

 

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

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

 

파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고,

해당 파일이 존재하지 않으면 새로운 파일이 생성된다.

위 예제는 디렉터리에 파일이 없는 상태에서 새파일.txt를 쓰기 모드인 'w'로 열었기 때문에 새파일.txt라는 이름의

새로운 파일이 생성되는 것이다.

 

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

## 파일 생성하기2
f = open("C:/doit/새파일.txt", 'w')
f.close()
 

위 예제에서 'f.close()'는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 사실 이 문장은 생략해도 된다.

프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아주기 때문이다.

하지만, 'close()'를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다.

쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.

 

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

이번에는 에디터를 열고 프로그램의 출력값을 파일에 직접 써 보자.

## 파일을 쓰기 모드로 열어 출력값 적기 예제1
# writedata.py
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
      data = "%d번째 줄입니다.\n" % i
      f.write(data)
f.close()
 

 

 

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

 

## 파일을 쓰기 모드로 열어 출력값 적기 예제2
for i in range(1, 11):
      data = "%d번째 줄입니다.\n" % i
      print(data)
→ 1번째 줄입니다.
→ 2번째 줄입니다.
→ 3번째 줄입니다.
→ 4번째 줄입니다.
→ 5번째 줄입니다.
→ 6번째 줄입니다.
→ 7번째 줄입니다.
→ 8번째 줄입니다.
→ 9번째 줄입니다.
→ 10번째 줄입니다.
 

두 프로그램의 다른 점은 data를 출력하는 방법이다. 두 번째 방법은 우리가 계속 사용해 왔던 모니터 화면에 출력하는 방법이고,

첫 번째 방법은 모니터 화면 대신 파일에 결괏값을 적는 방법이다.

두 방법의 차이점은 print 대신 파일 객체 f의 write 함수를 사용한 것 말고는 없다.

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

## 파일을 쓰기 모드로 열어 출력값 적기 예제3
C:\Users>cd C:\doit
C:\doit>python.writedata.py
C:\doit>
 

 

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

파이썬에는 외부 파일을 읽어 들여 프로그램에서 사용할 수 있는 여러 가지 방법이 있다. 이번에는 그 방법을 자세히 알아보자.

 

○ readline 함수 사용하기

첫 번째 방법은 readline 함수를 사용하는 방법이다. 에디터를 사용하여 다음 예제를 작성해 보자.

## readline 함수 사용하기1
# readline.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
→ 1번째 줄입니다.
 

위 예제는 f = open("새파일.txt", 'r')로 파일을 읽기 모드로 연 후 readline( )을 사용해서 파일의 첫 번째 줄을 읽어

출력하는 경우이다. 앞에서 만든 새파일.txt를 수정하거나 지우지 않았다면 위 프로그램을 실행했을 때

새파일.txt의 가장 첫 번째 줄이 화면에 출력될 것이다.

 

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

## readline 함수 사용하기2
# readline.py
f = open("C:/doit/새파일.txt", 'r')
while True:
      line = f.readline()
      if not line: break
      print(line)
f.close()
 

 

 

readlines 함수 사용하기

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

## readlines 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
      print(line)
f.close()
 

readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다.

's'가 하나 더 붙어 있음에 유의하자.

 

read 함수 사용하기

세 번째 방법은 read함수를 사용하는 방법이다. 다음 예제를 보자.

## read 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
 

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

 

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

쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다.

하지만, 원래 있던 값을 유지하면서 새로운 값만 추가해야 할 경우도 있다.

이런 경우에는 파일을 추가 모드('a')로 열면 된다. 에디터를 켜고 다음 소스 코드를 작성해 보자.

## 함수 내용 추가하기
# adddata.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문과 함께 사용하기

지금까지 살펴본 예제를 보면 항상 다음과 같은 방식으로 파일을 열고 닫아 왔다.

파일을 열면 위와 같이 항상 close해 주는 것이 좋다. with문을 사용하면 자동으로 처리할 수 있다.

## with문과 함께 사용하기
with open("foo.txt", 'w') as f:
      f.write("Life is too short, you need python")
 

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

 

 

이번 주제는 python에서 파일을 생성하고 읽고, 쓰는 방법을 알아보았다.

다음 연구 주제는 파이썬 클래스에 대해서 알아보겠다.

 


 

'연구노트 > Python' 카테고리의 다른 글

파이썬 모듈  (0) 2025.04.18
Python 클래스  (0) 2025.04.17
Python의 함수  (0) 2025.04.16
Python의 제어문(for문)  (0) 2025.04.11
Python 제어문(while문)  (1) 2025.04.08