티스토리 뷰
파이썬에서 파일 입출력은 데이터를 저장하거나 불러오는 데 자주 사용되는 기능입니다. 프로그램 실행 중 생성된 데이터를 저장하거나, 외부 데이터를 프로그램에 불러오는 작업은 대부분 파일을 통해 이루어집니다. 파이썬은 이러한 파일 입출력을 매우 간단하고 직관적으로 처리할 수 있는 다양한 방법을 제공합니다.
파일 열기와 닫기
파이썬에서 파일을 열고 작업하는 기본적인 방법은 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()
함수를 사용하여 특정 줄만 선택적으로 읽어올 수 있습니다.