logo

[Python] 파일 열기와 닫기, 읽기, 쓰기

 

파일 열기와 닫기

파일 작업을 수행하는 것은 프로그래밍에서 매우 일반적인 작업 중 하나입니다. Python에서는 이러한 작업을 용이하게 하기 위해 내장 함수와 문법을 제공합니다. 파일 작업을 시작하기 전에 반드시 파일을 열어야 하며, 작업이 끝나면 자원을 해제하기 위해 파일을 닫아야 합니다. 이 섹션에서는 Python에서 파일을 열고 닫는 방법에 대해 자세히 살펴보겠습니다.

 

파일 열기

Python에서 파일을 열기 위해 open 함수를 사용합니다. 이 함수는 파일 이름과 함께 파일 모드를 지정하는 문자열 인자를 받아 파일 객체를 반환합니다.

open 함수 사용법

기본 문법:

file_object = open(file_name, mode)
  • file_name: 파일의 이름이나 파일 경로를 나타내는 문자열입니다.
  • mode: 파일을 여는 방식을 명시하는 문자열입니다. 파일을 읽기 전용으로 열 것인지, 쓰기 가능하게 열 것인지 등을 결정합니다.

파일 모드

파일 모드는 파일을 열 때 수행하고자 하는 작업에 따라 결정됩니다. 주요 파일 모드는 다음과 같습니다.

  • 'r': 읽기 전용. 파일이 존재하지 않는 경우 오류 발생.
  • 'w': 쓰기 전용. 파일이 이미 존재하는 경우 내용을 덮어씁니다. 파일이 없는 경우 새로 생성합니다.
  • 'a': 추가 모드. 파일이 존재하는 경우 기존 내용의 끝에서부터 쓰기 시작합니다. 파일이 없는 경우 새로 생성합니다.
  • 'r+': 읽기/쓰기 모드. 파일이 존재하지 않는 경우 오류 발생.
  • 'b': 이진 모드. 파일을 이진(binary) 형태로 열 때 사용합니다. 예: 'rb', 'wb'
 

파일 닫기

파일 작업이 끝나면 반드시 파일을 닫아서 사용한 시스템 자원을 해제해야 합니다. 파일을 닫지 않으면 쓰기 작업의 경우 변경사항이 제대로 저장되지 않거나, 열린 파일로 인해 시스템 자원이 고갈될 수 있습니다.

close 메소드 사용법

파일 객체에 대해 close 메소드를 호출하여 파일을 닫습니다.

file_object.close()

with 문 사용법과 장점

with 문을 사용하면 파일 작업이 끝난 후 자동으로 파일을 닫을 수 있습니다. 이는 close 메소드를 명시적으로 호출하는 것을 잊어버릴 위험을 줄여줍니다.

with open(file_name, mode) as file_object:
    # 파일 작업 수행

with 문을 사용할 때 Python은 지정된 블록의 코드 실행이 끝나면 자동으로 close를 호출해 파일을 닫습니다. 이 방법은 파일을 닫는 가장 권장되는 방식입니다.

이렇게 파일을 열고 닫는 방법을 이해하고 적절히 사용함으로써 프로그램의 안정성과 효율성을 높일 수 있습니다.


 

파일에서 읽기

파일로부터 데이터를 읽어오는 것은 프로그래밍에서 자주 발생하는 작업 중 하나입니다. Python에서는 텍스트 파일과 바이너리 파일을 읽을 때 사용하는 방법이 조금 다릅니다. 다음 섹션에서는 이 두 가지 유형의 파일에서 데이터를 읽는 방법에 대해 자세히 설명합니다.

 

텍스트 파일 읽기

텍스트 파일에서 데이터를 읽기 위해 Python은 여러 가지 메소드를 제공합니다. 이들 메소드는 사용하는 상황에 따라 선택할 수 있습니다.

read() 메소드

read(size=-1) 메소드는 파일에서 데이터를 읽고 문자열로 반환합니다. size 매개변수를 사용하여 읽을 문자의 수를 지정할 수 있으며, 기본값은 -1이어서 파일의 전체 내용을 읽습니다.

file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()

readline() 메소드

readline(size=-1) 메소드는 파일에서 한 줄을 읽습니다. size 매개변수는 선택적이며, 이를 통해 읽을 문자의 수를 제한할 수 있습니다.

file = open('example.txt', 'r')
line = file.readline()
while line:
    print(line, end='')
    line = file.readline()
file.close()

readlines() 메소드

readlines() 메소드는 파일의 모든 라인을 읽고, 각 줄을 리스트 항목으로 반환합니다.

file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
    print(line, end='')
file.close()

파일 반복문을 이용한 행 단위 읽기

파일 객체를 직접 반복하는 방법이 있습니다. 이 방법은 메모리를 효율적으로 사용하며, 큰 파일을 다룰 때 유용합니다.

with open('example.txt', 'r') as file:
    for line in file:
        print(line, end='')
 

바이너리 파일 읽기

바이너리 파일에서 데이터를 읽을 때에는 위와 유사하게 read() 메소드를 사용하되, 읽어온 데이터는 문자열이 아닌 바이트 객체로 반환됩니다. 이 때문에 텍스트 파일을 읽을 때와는 다르게 처리가 필요할 수 있습니다.

바이너리 파일 읽기 방법

바이너리 파일을 열 때에는 파일 모드를 'rb'로 설정합니다. 그런 다음 read() 메소드를 사용하여 데이터를 읽을 수 있습니다.

with open('example.bin', 'rb') as file:
    content = file.read()
    print(content)

위 예제는 바이너리 파일인 'example.bin'에서 전체 내용을 읽어들여 출력합니다. 읽어들인 데이터는 바이트 형태로 처리되며, 필요에 따라 이를 적절히 변환하여 사용해야 합니다. 예를 들어, 이미지 파일이나 비디오 파일 등을 다룰 때 이 방식이 주로 사용됩니다.


 

파일에 쓰기

파일에 데이터를 쓰는 것은 데이터를 영구적으로 저장하는 기본적인 방법 중 하나입니다. Python에서는 텍스트 파일과 바이너리 파일에 데이터를 쓸 수 있는 다양한 방법을 제공합니다.

 

텍스트 파일 쓰기

write() 메소드

write() 메소드는 파일에 문자열을 쓰는 데 사용됩니다. 파일을 열 때 'w' 모드를 사용하면 기존에 있던 내용은 삭제되고 새로운 내용이 작성됩니다. 파일이 존재하지 않으면 새 파일이 생성됩니다.

text = "Python을 배우고 있습니다."
with open('example.txt', 'w') as file:
    file.write(text)

위 코드는 "example.txt" 파일을 열어 "Python을 배우고 있습니다." 라는 문장을 쓰고 파일을 닫습니다.

writelines() 메소드

writelines() 메소드는 문자열 리스트를 파일에 쓸 때 사용됩니다. 각 문자열 사이에 자동으로 줄바꿈을 넣지 않으므로, 필요하다면 문자열 끝에 '\n'을 추가해야 합니다.

lines = ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄"]
with open('example.txt', 'w') as file:
    file.writelines(lines)

이 코드는 세 개의 줄을 "example.txt" 파일에 쓰며, 각 줄은 개행 문자로 끝납니다.

파일 모드를 이용한 쓰기와 추가

'w' 모드는 파일을 새로 쓸 때 사용합니다. 만약 파일에 추가로 쓰고 싶다면, 'a' 모드를 사용해야 합니다. 'a' 모드는 파일의 끝에 새로운 내용을 추가합니다.

additional_text = "이제 파일에 쓰기를 배웠습니다."
with open('example.txt', 'a') as file:
    file.write(additional_text)

이 코드는 기존의 내용 뒤에 새로운 내용을 추가합니다.

 

바이너리 파일 쓰기

바이너리 파일에 쓰기 위해서는 'wb' 모드를 사용해 파일을 열어야 합니다. 이 모드에서는 write() 메소드를 사용해 바이너리 데이터를 파일에 쓸 수 있습니다. 텍스트 데이터가 아닌 데이터(이미지, 동영상 등)를 처리할 때 주로 사용됩니다.

binary_data = b'\x00\xFF\x00\xFF'  # 예시 바이너리 데이터

with open('binary_example.bin', 'wb') as file:
    file.write(binary_data)

이 코드는 바이너리 데이터를 "binary_example.bin" 파일에 씁니다. 바이너리 데이터는 b 접두어를 사용하여 바이트 객체로 표현됩니다.

파일에 데이터를 쓰는 과정은 데이터를 영구적으로 저장하는 기본적인 수단이며, Python은 이를 위해 다양하고 간결한 방법을 제공합니다. 텍스트 파일이든 바이너리 파일이든, 목적에 맞게 적절한 방법을 선택하여 데이터를 저장하세요.

Previous
모듈