[Python] 파이썬 파일 입출력(파일 생성, 읽기, 쓰기, 이어쓰기) 총정리

프로그래밍에서 유의미한 데이터가 생성되었다면 이것을 어딘가에 기록해두어야 합니다. DB를 사용하면 가장 좋겠지만 간단한 데이터들은 DB를 사용하지 않고 파일 형태(ex : txt 파일)로 어딘가에 저장해 뒀다가 사용할 수도 있겠죠. 이번 포스팅에서는 파이썬에서 파일 입출력 하는 방법에 대해 알아보도록 하겠습니다.
 

※ 파일 입출력이란 로컬 파일의 데이터를 읽거나 반대로 파일에 데이터를 쓰는 작업을 뜻하며 쉽게 메모장이나 바이너리 파일에 텍스트를 넣거나 불러오는 과정을 뜻한다고 생각하시면 되겠습니다.

 


 

 파일 열기와 닫기(open, close) 

# 파일 열기
# 변수명 = open("파일경로/파일이름.txt", "모드")
new_file = open("sample.txt", "w")

# 파일 닫기
new_file.close()

먼저 파일을 사용하기 위해서는 파일 열어줘야하고, 사용이 끝났다면 파일을 닫아주어야 합니다. 이 과정을 위해 파이썬에서는 open()와 close() 메서드를 제공하는데요. 파일을 열 때는 open() 함수를 사용하며, 파일 경로와 모드를 지정해야 합니다. 모드는 파일을 쓰기, 읽기, 또는 추가 모드로 열 것인지를 나타냅니다.
 
위의 예제처럼 w모드로 열면 신규 파일을 생성할 수 있습니다. 파일을 사용한 후에는 close() 메서드를 사용하여 파일을 닫아주면 됩니다.
 

※ 참고로 파일 open을 했다면 반드시 close를 진행해주셔야 합니다. 그렇지 않다면 계속 파일이 open되어 있는 상태로 자원을 차지하고 있어 수정한 파일이 반영이 안 되는 등의 오동작 소지가 있습니다.

 

파일 모드

모드 설명
r 읽기 모드(디폴트)
r+ 읽기 + 쓰기 모드
w 쓰기 모드
a 쓰기 + 이어쓰기 모드
t 텍스트 모드(디폴트)
b 바이너리 모드

파일모드는 파이썬에서 파일을 열 때 어떤 방식으로 열 것인지를 결정하는데 사용됩니다. 파일 모드의 옵션값은 위의 표를 참고해 주세요.
 


 

 파일 읽기 

read() : 파일을 읽습니다.

file = open("sample.txt", "r")
content = file.read()
print(content)
file.close()

파일에서 데이터를 가지고 오고 싶다면 파일을 읽어야 합니다. 파이썬에서 파일을 읽을 때는 파일을 r혹은 r+모드로 open한 뒤 read() 관련 메서드를 사용하면 되는데, 그중에서 가장 기본이 되는 read() 메서드는 파일 전체 데이터를 문자열로 반환해 줍니다. read(n) 형태로 인자값을 넣어서 문자 n개를 반환하게끔 할 수도 있습니다. 이때 파일이 큰 경우에는 전체 내용을 메모리에 로드하므로 메모리 사용에 주의하셔야 합니다.
 

※ 참고로 읽어야 하는 대상 파일이 없으면 에러가 발생하니 이점 주의하셔야 합니다.

 
 

readline() : 파일에서 한 줄씩 읽습니다.

file = open("sample.txt", "r")
line = file.readline()
while line:
    print(line)
    line = file.readline()
file.close()

파일의 데이터를 라인 단위로 가져오고 싶을 경우도 있을 것 같습니다. 그럴 때는 readline() 메서드를 사용하면 됩니다. readline()은 '\n' 개행 기준으로 데이터를 가져와서 문자열로 반환해 줍니다.
 
 

readlines() : 파일의 모든 라인을 각각의 문자열로 읽어 리스트로 반환합니다.

file = open("sample.txt", "r")
lines = file.readlines()
for line in lines:
    print(line)
file.close()

파일의 모든 라인을 읽은 뒤 리스트로 반환해 주는 함수도 있습니다. readlines()를 사용하면 파일의 각 라인은 문자열 형태로 리스트 요소에 저장됩니다.
 


 

 파일 쓰기 

write(): 파일에 내용을 씁니다.

file = open("sample.txt", "w")
file.write("파일에 작성할 문자열")
file.close()

파일에 문자열을 쓸 때는 파일을 r+나 w모드로 open한 뒤 write() 메서드를 사용하면 됩니다. 이때 기존 내용을 덮어쓰므로 주의가 필요합니다. 만약 파일이 없다면 파일을 생성합니다.
 
 

writelines(): 리스트의 문자열 요소들을 파일에 씁니다.

data = ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄\n"]
file = open("sample.txt", "w")
file.writelines(data)
file.close()

파일에 리스트의 내용을 쓸 때는 writelines() 메서드를 사용합니다. 위의 예제에서도 쓰기모드(w)로 파일을 열었기 때문에기존 내용을 덮어쓰게 됩니다. 파일을 덮어쓰지 않고 이어 쓰기 위해서는 w모드가 아닌 a모드로 파일을 열어줘야 합니다.
 


 

 파일 이어 쓰기 

file = open("sample.txt", "a")
file.write("파일에 작성할 문자열1\n")
file.write("파일에 작성할 문자열2\n")
file.close()

파일을 이어 쓰기 모드로 열면 이미 존재하는 파일의 끝에 새로운 데이터를 추가할 수 있습니다. 파일을 열 때 mode 매개변수를 'a' 또는 'a+'로 설정하시면 됩니다. 여기서 a는 이어쓰기 전용 모드이고, a+는 이어쓰기와 읽기 모두 가능한 모드입니다.
 


 

 같이 쓰면 좋은 파일 입출력 문법 

with문을 사용하여 파일 자동으로 close 하기

with open('sample.txt', 'w') as file:
  file.write("파일에 작성할 문자열1\n")
  file.write("파일에 작성할 문자열2\n")

위의 예제에서는 파일을 사용한 뒤 마지막에 매번 close() 함수를 사용하였습니다. 하지만 이것이 번거롭기도 하고, return을 잘못사용하는 등의 실수로 파일 close가 되지 않는 상황도 배제할 수 없습니다. 파이썬에서는 이런 부분을 감안하여 with open이라는 문법을 새로 만들었는데요. with open을 사용하면 지정된 스코프에서만 파일을 사용할 수 있는 대신에 스코프를 벗어나면 파일을 자동으로 닫아줍니다.  이 방식을 사용하면 파일이 자동으로 닫히므로 코드가 간결해지고 안전해집니다.
 
 

파일 입출력 오류 처리

try:
    with open('sample.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except PermissionError:
    print("파일을 열 권한이 없습니다.")
except IOError as e:
    print(f"파일 읽기 오류: {e}")

파일 입출력 중 오류가 발생할 수 있으므로, 예외 처리를 통해 오류를 처리하는 것이 좋습니다. 위와 같이 try와 except 블록을 사용하여 오류를 처리할 수 있으며 위와 같이 코드를 작성하였을 때 프로그램의 안정성을 높이고 예기치 못한 상황에 대처할 수 있습니다. 오류 종류들은 아래 표를 참고해 주세요.
 
 

파일 입출력 오류 종류

오류 종류 내용
IOError 파일 입출력과 관련된 일반적인 오류를 처리하기 위한 예외 클래스입니다. 다양한 파일 입출력 오류에 대한 상위 예외입니다.
FileNotFoundError 대상 파일을 찾을 수 없을 때 발생하는 예외로 주로 열려고 파일이 없을 때 발생합니다.
PermissionError 파일 또는 디렉토리에 대한 액세스 권한이 없는 경우에 발생하는 예외로 주로 파일을 읽거나 쓰려고 할때 권한이 없는 경우 발생합니다.
FileExistsError 파일을 생성하려고 할 때 이미 그 이름을 사용하고 있는 파일이 있는 경우 발생하는 예외입니다.
IsADirectoryError 파일을 열어야 하는데 디렉토리를 열려고 시도할 때 발생하는 예외입니다.
NotADirectoryError 디렉토리가 아닌데 디렉토리로 처리하려고 할 때 발생하는 발생하는 예외입니다.
UnicodeDecodeError 파일을 텍스트 모드로 읽을 때 인코딩 문제로 발생하는 예외로 파일의 인코딩과 프로그램에서 사용하는 인코딩이 일치하지 않을 때 발생합니다.
UnicodeEncodeError 파일을 텍스트 모드로 쓸 때 인코딩 문제로 발생하는 예외로 파일에 쓸 내용을 지정한 인코딩으로 변환할 수 없는 경우 발생합니다.

 

댓글

Designed by JB FACTORY