파일 읽고 쓰기

honeyricecake·2022년 6월 30일
0

파이썬

목록 보기
16/26

파일 생성하기

다음 소스 코드를 에디터로 작성해서 저장한 후 실행해 보자.
프로그램을 실행한 디렉터리에 새로운 파일이 하나 생성된 것을 확인할 수 있을 것이다.

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 는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 사실 이 문장은 생략해도 된다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아주기 때문이다.

하지만 close를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다.
쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.

파일 경로와 슬래시(/)

파이썬 코드에서 파일 경로를 표시할 때 "C:/doit/새파일.txt"처럼 슬래시(/)를 사용할 수 있다. 만약 역슬래시()를 사용한다면 역슬래시 두개를 사용하거나
r"C:\doit\새파일.txt"와 같이 문자열 앞에 r문자(Raw String)을 덧붙여 사용해야 한다.
왜냐하면 "C:\note\test.txt"처럼 파일경로에 \n\과 같은 이스케이프 문자가 있을 경우 줄바꿈 문자로 해석되어 의도했던 파일 경로와 달라지기 때문이다.

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

위 예에서는 파일을 쓰기 모드로 열기만 했지 정작 아무것도 쓰지는 않았다.

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

f = open("C:/doit/새파일.txt","w")
for i in range(1,11):
    data = f"{i}번째 줄입니다.\n"
    f.write(data)
f.close()

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

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

readline 함수 이용하기

첫번째 방법은 readline 함수를 사용하는 방법이다.

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

while True:
    line = f.readline()
    if not line : break  # line이 아무것도 없으면 False이므로 not line은 True가 리턴됨
    print(line,end="")
f.close()

readline()이 더 이상 읽을 줄이 없을 경우 빈 문자열""을 리턴하는 것을 이용하였다.

realines함수 사용하기

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

lines = f.readlines()
for line in lines:
    print(line, end ="")
f.close()

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

Tip. 줄바꿈 문자(\n) 제거하기

line = line.strip() : line양쪽의 공백제거

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

쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다. 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우도 있다.

이런 경우에는 파일을 추가모드 ('a')로 열면 된다.

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

for i in range(11, 20):
    data = f"{i}번째 줄입니다.\n"
    f.write(data)
f.close()

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

with문과 함께 사용하기

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

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

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

다음 예는 with문을 사용해서 위 예제를 다시 작성한 모습이다.

with open("foo.txt", "w") as f:
    f.write("Life is too short, you need Python")

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

0개의 댓글