티스토리 뷰

파이썬에서 파일 입출력은 데이터를 저장하거나 불러오는 데 자주 사용되는 기능입니다. 프로그램 실행 중 생성된 데이터를 저장하거나, 외부 데이터를 프로그램에 불러오는 작업은 대부분 파일을 통해 이루어집니다. 파이썬은 이러한 파일 입출력을 매우 간단하고 직관적으로 처리할 수 있는 다양한 방법을 제공합니다.

파일 열기와 닫기

파이썬에서 파일을 열고 작업하는 기본적인 방법은 open() 함수를 사용하는 것입니다. 이 함수는 파일을 열고, 작업이 끝난 후에는 반드시 close() 함수를 호출하여 파일을 닫아야 합니다.

파일 열기

파일을 열 때는 open() 함수에 두 가지 인자를 전달해야 합니다:

  • 첫 번째 인자는 파일 경로입니다.
  • 두 번째 인자는 모드로, 파일을 어떻게 열 것인지 지정합니다.

다음은 자주 사용하는 모드입니다:

  • 'r': 읽기 모드 (파일을 읽기만 할 때 사용)
  • 'w': 쓰기 모드 (파일에 내용을 쓸 때 사용, 기존 내용은 삭제됨)
  • 'a': 추가 모드 (기존 내용 뒤에 새로운 내용을 추가할 때 사용)
# 파일을 읽기 모드로 열기
file = open('example.txt', 'r')

# 파일을 쓰기 모드로 열기
file = open('example.txt', 'w')

# 파일을 추가 모드로 열기
file = open('example.txt', 'a')

파일 닫기

파일 작업이 끝나면 반드시 close() 메서드를 호출하여 파일을 닫아야 합니다. 이를 생략하면 메모리 누수나 데이터 손실이 발생할 수 있습니다.

file.close()

파일 읽기

파이썬에서는 다양한 방법으로 파일의 내용을 읽어올 수 있습니다. 대표적으로 read(), readline(), readlines() 세 가지 방법이 있습니다.

read() 함수

read() 함수는 파일의 모든 내용을 하나의 문자열로 반환합니다.

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

readline() 함수

readline() 함수는 파일에서 한 줄씩 읽어오는 함수입니다. 이 함수는 한 줄씩 처리해야 하는 경우 유용합니다.

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()

파일 쓰기

파이썬에서는 write() 메서드를 사용하여 파일에 내용을 쓸 수 있습니다. 이때, 파일을 쓰기 모드('w') 또는 추가 모드('a')로 열어야 합니다.

write() 함수

write() 함수는 문자열 데이터를 파일에 씁니다. 쓰기 모드('w')로 파일을 열면 기존 내용은 삭제되고 새로운 내용만 저장됩니다.

file = open('example.txt', 'w')
file.write('Hello, Python!')
file.close()

추가 모드로 쓰기

추가 모드('a')로 파일을 열면 기존 내용 뒤에 새로운 내용을 덧붙일 수 있습니다.

file = open('example.txt', 'a')
file.write('\nThis is an additional line.')
file.close()

with 문으로 안전하게 파일 다루기

파이썬에서 파일 작업 시 with 문을 사용하면 더 안전하게 파일을 처리할 수 있습니다. with 문을 사용하면 블록이 끝났을 때 자동으로 파일이 닫히므로, 별도로 close()를 호출할 필요가 없습니다.

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

위 코드에서는 with 블록이 끝나면 자동으로 파일이 닫힙니다. 이는 코드의 가독성을 높이고, 실수로 close()를 호출하지 않는 문제를 방지합니다.

예외 처리와 함께 사용하는 방법

파일 작업 중에는 다양한 예외가 발생할 수 있습니다. 예를 들어, 존재하지 않는 파일을 읽으려고 시도하면 FileNotFoundError가 발생합니다. 이러한 상황에 대비해 예외 처리를 추가하는 것이 좋습니다.

try:
    with open('non_existent_file.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")

파일 포인터 이동: seek()와 tell()

파일 작업 중 특정 위치로 포인터를 이동하거나 현재 위치를 확인해야 할 때가 있습니다. 이때는 seek()tell() 함수를 사용할 수 있습니다.

  • seek(offset)은 지정한 바이트만큼 포인터를 이동시킵니다.
  • tell()은 현재 포인터의 위치를 반환합니다.
with open('example.txt', 'r') as file:
    print(file.tell())  # 현재 위치 출력 (0)
    file.seek(5)        # 5바이트 앞으로 이동
    print(file.read())  # 이후 내용 출력

결론

파이썬의 파일 입출력(File I/O) 기능은 매우 강력하고 유연합니다. 간단한 텍스트 데이터부터 복잡한 바이너리 데이터까지 다양한 데이터를 쉽게 처리할 수 있습니다. 또한, 예외 처리와 함께 사용하면 안전하게 데이터를 다룰 수 있으며, with 문을 활용하면 코드의 가독성과 안전성이 더욱 향상됩니다.

 

파이썬에서 제공하는 다양한 파일 입출력 방법들을 잘 이해하고 활용한다면, 데이터 처리 및 저장 작업에서 큰 효율성을 얻을 수 있을 것입니다.

 


자주 묻는 질문

Q1: 파이썬에서 바이너리(binary) 파일도 처리할 수 있나요?

네, 가능합니다. 바이너리 파일은 'rb'(읽기), 'wb'(쓰기) 등의 모드를 사용하여 처리할 수 있습니다.

Q2: 여러 줄의 텍스트를 한 번에 리스트로 읽어올 수 있나요?

네, 가능합니다. readlines() 함수를 사용하면 여러 줄의 텍스트를 리스트 형태로 반환받아 사용할 수 있습니다.

Q3: with 문 없이도 안전하게 파일 작업을 할 수 있나요?

가능하지만 권장하지 않습니다. with 문을 사용하지 않으면 반드시 직접 close() 메서드를 호출해야 하며, 그렇지 않으면 메모리 누수나 데이터 손실 문제가 발생할 수 있습니다.

Q4: 이미 존재하는 파일에 덮어쓰지 않고 내용을 추가하려면 어떻게 해야 하나요?

추가 모드('a')를 사용하여 기존 내용 뒤에 새로운 내용을 덧붙일 수 있습니다.

Q5: 텍스트 파일에서 특정 줄만 읽어올 수 있나요?

네, 가능합니다. 반복문이나 조건문과 함께 readline() 또는 readlines() 함수를 사용하여 특정 줄만 선택적으로 읽어올 수 있습니다.

반응형