소개
Python 의 파일 처리 기능은 광범위한 애플리케이션에 필수적입니다. 다양한 파일 접근 모드를 이해하는 것은 파일을 효과적으로 관리하고 조작하는 데 매우 중요합니다. 이 랩에서는 Python 의 일반적인 파일 접근 모드, 그 차이점, 그리고 특정 사용 사례에 적합한 모드를 선택하는 방법에 대해 자세히 알아보겠습니다.
이 랩에서는 Python 의 기본적인 파일 접근 모드에 대해 배우고, 일반적인 사용 사례를 살펴보고, 파일 작업에 적합한 모드를 선택하는 방법을 이해하게 됩니다.
읽기 모드 ('r') 이해 및 실습
Python 에서 파일 접근 모드는 파일을 어떻게 열고 어떤 작업 (읽기 또는 쓰기) 이 허용되는지 지정합니다. 이러한 모드를 이해하는 것은 효과적인 파일 처리에 매우 중요합니다. 내장 함수 open()을 사용할 때 파일 경로와 선택적으로 모드 문자열을 제공합니다. 예를 들어, open('my_file.txt', 'r')은 파일을 읽기 위해 엽니다.
다음은 일반적인 모드에 대한 간략한 개요입니다.
- 읽기 모드 (
'r'): 읽기 위해 엽니다 (기본값). 포인터는 시작 부분에 위치합니다. 파일이 존재하지 않으면FileNotFoundError를 발생시킵니다. - 쓰기 모드 (
'w'): 쓰기 위해 엽니다. 파일이 존재하면 잘라내고 (지우고), 존재하지 않으면 생성합니다. 포인터는 시작 부분에 위치합니다. - 추가 모드 (
'a'): 쓰기 위해 엽니다. 파일이 존재하면 끝에 포인터가 위치하고, 존재하지 않으면 생성합니다. 새 데이터는 끝에 추가됩니다. - 읽기 및 쓰기 (
'r+'): 기존 파일을 읽기 및 쓰기 위해 엽니다. 포인터는 시작 부분에 위치합니다. - 쓰기 및 읽기 (
'w+'): 쓰기 및 읽기 위해 엽니다. 파일을 잘라내거나 생성합니다. 포인터는 시작 부분에 위치합니다. - 추가 및 읽기 (
'a+'): 추가 및 읽기 위해 엽니다. 쓰기의 경우 포인터는 끝에 위치합니다. 파일이 존재하지 않으면 생성합니다.
가장 기본적인 모드인 읽기 ('r') 부터 실습해 보겠습니다. 이 모드는 기존 파일의 내용을 읽는 데만 사용됩니다. 파일 포인터는 시작 부분에서 시작합니다. 존재하지 않는 파일을 'r' 모드로 열려고 하면 오류가 발생한다는 점을 기억하세요.
먼저, 읽을 파일이 필요합니다. LabEx 내의 VS Code 편집기를 사용하여 파일 탐색기에서 /home/labex/project 디렉토리로 이동합니다. my_reading_file.txt라는 새 파일을 만듭니다. 다음 줄을 추가하고 파일을 저장합니다.
This is the first line.
This is the second line.
이제 동일한 디렉토리에 read_example.py라는 Python 스크립트를 만듭니다. 텍스트 파일을 읽기 모드로 열고, 내용을 읽어 출력하는 다음 코드를 추가합니다. 파일이 없을 경우를 우아하게 처리하기 위해 try...except 블록을 포함합니다.
try:
## Open the file in read mode ('r')
with open('/home/labex/project/my_reading_file.txt', 'r') as file:
## Read the entire content of the file
content = file.read()
print("File content:")
print(content)
except FileNotFoundError:
print("Error: The file my_reading_file.txt was not found.")
except Exception as e:
print(f"An error occurred: {e}")
print("\\nFinished reading the file.")
이 Python 스크립트를 저장합니다. 다음으로, VS Code 에서 터미널을 엽니다 (Terminal > New Terminal). pwd를 실행하여 올바른 디렉토리에 있는지 확인합니다. /home/labex/project가 표시되어야 합니다.
Python 인터프리터를 사용하여 스크립트를 실행합니다.
python read_example.py
터미널에 my_reading_file.txt의 내용이 출력되고 완료 메시지가 표시됩니다.
File content:
This is the first line.
This is the second line.
Finished reading the file.
이는 'r' 모드를 사용하여 파일을 성공적으로 열고 읽는 것을 보여줍니다.

쓰기 모드 ('w') 실습
쓰기 모드 ('w') 는 파일에 쓰고 싶을 때 사용됩니다. 주의하세요: 파일이 이미 존재하는 경우, 'w' 모드로 열면 파일을 잘라내기 (truncate), 즉 이전의 모든 내용이 지워집니다. 파일이 존재하지 않으면 'w' 모드가 파일을 생성합니다. 이 모드는 새 파일을 만들거나 기존 파일로 새로 시작하는 데 이상적입니다.
파일에 쓰는 것을 시도해 보겠습니다. /home/labex/project 디렉토리에서 write_example.py라는 새 Python 파일을 만듭니다. 다음 코드를 추가합니다. 이 스크립트는 my_writing_file.txt를 쓰기 모드로 열거나 생성하고 두 줄을 씁니다.
try:
## Open the file in write mode ('w')
## If the file exists, its content will be overwritten.
## If the file does not exist, it will be created.
with open('/home/labex/project/my_writing_file.txt', 'w') as file:
## Write some content to the file
file.write("This is the first line written in write mode.\n")
file.write("This is the second line.\n")
print("Content successfully written to my_writing_file.txt")
except Exception as e:
print(f"An error occurred: {e}")
print("\nFinished writing to the file.")
write_example.py 스크립트를 저장합니다. 터미널에서 (여전히 /home/labex/project에 있음) 스크립트를 실행합니다.
python write_example.py
다음 확인 메시지가 표시됩니다.
Content successfully written to my_writing_file.txt
Finished writing to the file.
파일이 생성되었고 올바른 텍스트가 포함되어 있는지 확인하려면 터미널에서 cat 명령을 사용합니다.
cat /home/labex/project/my_writing_file.txt
출력은 스크립트가 쓴 내용과 정확히 일치해야 합니다.
This is the first line written in write mode.
This is the second line.
이는 'w' 모드를 사용하여 파일을 생성하거나 덮어쓰고 내용을 쓰는 방법을 보여줍니다.
추가 모드 ('a') 실습
쓰기 모드 ('w') 와 달리, 추가 모드 ('a') 는 현재 내용을 삭제하지 않고 기존 파일의 끝에 내용을 추가하는 데 사용됩니다. 파일이 존재하지 않으면 'a' 모드가 파일을 생성합니다. 파일 포인터는 열릴 때 자동으로 파일의 끝에 위치하므로 모든 write() 작업은 데이터를 추가합니다.
이전 단계에서 생성한 my_writing_file.txt에 몇 줄을 추가해 보겠습니다. /home/labex/project에 다음 코드를 사용하여 append_example.py라는 새 Python 스크립트를 만듭니다.
try:
## Open the file in append mode ('a')
## If the file exists, new content will be added to the end.
## If the file does not exist, it will be created.
with open('/home/labex/project/my_writing_file.txt', 'a') as file:
## Append some content to the file
file.write("This line is appended.\n")
file.write("Another line is appended.\n")
print("Content successfully appended to my_writing_file.txt")
except Exception as e:
print(f"An error occurred: {e}")
print("\nFinished appending to the file.")
이 스크립트를 저장합니다. 이제 터미널에서 실행합니다.
python append_example.py
스크립트는 추가 작업을 확인합니다.
Content successfully appended to my_writing_file.txt
Finished appending to the file.
결과를 보려면 cat을 다시 사용하여 전체 파일을 봅니다.
cat /home/labex/project/my_writing_file.txt
원래 두 줄 다음에 새로 추가된 두 줄이 표시됩니다.
This is the first line written in write mode.
This is the second line.
This line is appended.
Another line is appended.
추가 모드는 로그 항목을 추가하거나 이전 데이터를 잃지 않고 데이터 파일에 새 레코드를 추가하는 것과 같은 작업에 매우 유용합니다.
읽기/쓰기 모드 실습 및 적절한 모드 선택
Python 은 또한 동일한 open() 컨텍스트 내에서 읽기와 쓰기를 모두 허용하는 모드를 제공합니다. 이러한 모드는 더 많은 유연성을 제공하지만 파일 포인터를 신중하게 처리해야 합니다.
- 읽기 및 쓰기 (
'r+'): 기존 파일을 읽기 및 쓰기 모두에 대해 엽니다. 포인터는 시작 부분에서 시작합니다. 쓰기는 포인터의 위치에서 기존 내용을 덮어씁니다. - 쓰기 및 읽기 (
'w+'): 파일을 쓰기 및 읽기 위해 엽니다. 파일이 있으면 파일을 잘라내기 (truncate) 하고, 없으면 생성합니다. 포인터는 시작 부분에서 시작합니다. - 추가 및 읽기 (
'a+'): 파일을 추가 (끝에 쓰기) 및 읽기 위해 엽니다. 파일이 없으면 생성합니다. 포인터는 쓰기의 경우 끝에서 시작하지만, 시작 부분에서 읽기 위해 이동할 수 있습니다 (예:file.seek(0)사용).
'r+'를 시연해 보겠습니다. 1 단계에서 생성한 my_reading_file.txt를 사용합니다. 파일을 열고, 내용을 읽은 다음, 포인터를 다시 시작 부분으로 이동하여 파일의 시작 부분을 덮어씁니다.
/home/labex/project에 rplus_example.py라는 Python 파일을 만듭니다. 다음 코드를 추가합니다.
try:
## Open the file in read and write mode ('r+')
## The file must exist for this mode.
with open('/home/labex/project/my_reading_file.txt', 'r+') as file:
## Read the initial content
initial_content = file.read()
print("Initial file content:")
print(initial_content)
## Move the file pointer back to the beginning
print("\nMoving pointer to the beginning using file.seek(0).")
file.seek(0)
## Write new content at the beginning (overwriting existing content)
print("Writing new content...")
file.write("Prepended line 1.\n")
file.write("Prepended line 2.\n")
## If the new content is shorter than what was overwritten,
## the rest of the original content might remain unless truncated.
## We can use file.truncate() after writing to remove any trailing old data.
print("Truncating file to the current position to remove old trailing data.")
file.truncate()
print("\nContent written and file truncated.")
except FileNotFoundError:
print("Error: The file was not found. 'r+' requires the file to exist.")
except Exception as e:
print(f"An error occurred: {e}")
print("\nFinished with r+ mode example.")
이 스크립트는 파일을 'r+'로 열고, 읽고, 다시 시작 부분으로 이동 (file.seek(0)) 하고, 새 줄을 쓰고 (덮어쓰기), file.truncate()를 사용하여 새로 작성된 텍스트를 넘어 존재할 수 있는 나머지 원래 내용을 제거합니다.
rplus_example.py를 저장합니다. 실행하기 전에 my_reading_file.txt에 원래 내용이 있는지 확인해 보겠습니다.
echo "This is the first line." > /home/labex/project/my_reading_file.txt
echo "This is the second line." >> /home/labex/project/my_reading_file.txt
이제 터미널에서 Python 스크립트를 실행합니다.
python rplus_example.py
프로세스에 대한 메시지와 함께 초기 내용이 출력되는 것을 볼 수 있습니다.
Initial file content:
This is the first line.
This is the second line.
Moving pointer to the beginning using file.seek(0).
Writing new content...
Truncating file to the current position to remove old trailing data.
Content written and file truncated.
Finished with r+ mode example.
cat을 사용하여 최종 파일 내용을 확인합니다.
cat /home/labex/project/my_reading_file.txt
출력은 덮어쓰기 및 잘라내기 덕분에 새로 작성된 내용만 표시해야 합니다.
Prepended line 1.
Prepended line 2.
적절한 파일 액세스 모드 선택
올바른 모드를 선택하는 것이 중요합니다. 다음은 간단한 가이드입니다.
- 기존 파일에 대한 읽기 전용 액세스에는
'r'을 사용합니다. - 새 파일 생성 또는 기존 파일의 내용을 완전히 바꾸려면
'w'를 사용합니다. - 기존 데이터를 잃지 않고 파일의 끝에 추가하려면
'a'를 사용합니다 (로그에 적합). - 기존 파일을 시작 부분부터 읽고 수정하려면
'r+'를 사용합니다. - 파일을 생성하거나 덮어쓰기한 다음 읽기/쓰기하려면
'w+'를 사용합니다. - 파일에 추가하고 읽을 수 있으려면
'a+'를 사용합니다 (탐색 필요).
다음 표는 주요 동작을 요약합니다.
| 모드 | 읽기 | 쓰기 | 존재하지 않는 경우 생성 | 존재하는 경우 잘라내기 | 포인터 위치 (초기) |
|---|---|---|---|---|---|
'r' |
예 | 아니요 | 아니요 | 아니요 | 시작 부분 |
'w' |
아니요 | 예 | 예 | 예 | 시작 부분 |
'a' |
아니요 | 예 | 예 | 아니요 | 끝 |
'r+' |
예 | 예 | 아니요 | 아니요 | 시작 부분 |
'w+' |
예 | 예 | 예 | 예 | 시작 부분 |
'a+' |
예 | 예 | 예 | 아니요 | 끝 |
읽기, 쓰기, 추가, 기존 파일 처리 또는 새 파일 생성 여부를 고려하여 작업에 가장 적합한 모드를 자신 있게 선택할 수 있습니다.
요약
이 랩에서는 Python 의 다양한 파일 액세스 모드와 주요 차이점에 대해 배웠습니다. 기본적인 읽기, 쓰기 및 추가 작업에 대해 각각 'r', 'w', 및 'a' 모드를 살펴보았습니다. 또한 더 많은 유연성을 제공하는 읽기 및 쓰기 모드 ('r+', 'w+', 'a+') 에 대해서도 간략하게 다루었습니다.
이러한 모드를 실습하고 파일 생성, 잘라내기 (truncation), 포인터 위치와 관련하여 해당 동작을 이해함으로써 이제 Python 에서 파일 처리 작업에 적합한 모드를 선택할 수 있게 되었습니다. 이 지식은 애플리케이션에서 파일을 효과적으로 관리하고 조작하는 데 필수적입니다.



