1️⃣ 함수
2️⃣ 입력과 출력
3️⃣ 파일 읽고 쓰기
4️⃣ 연습 문제
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()는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 쓰기 모드로 열었던 파일을 닫아 주지 않으면 오류가 발생한다.
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)
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문에서 탈출한다.
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가 하나 더 붙어 있음에 유의하자.
f = open('새파일.txt', 'a')
data = f.read()
print(data)
f.close()
f.read()는 파일의 내용 전체를 문자열로 돌려준다. 따라서 위 예의 data는 파일의 전체 내용이다.
쓰기 모드('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 파일이 원래 가지고 있던 내용 바로 다음부터 결괏값을 적기 시작한다.
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되어 편리하다.