Post

파이썬 공부

파이썬 공부

들어가며

지금까지 우리는 변수에 데이터를 저장하고, 함수와 모듈을 이용해 프로그램을 구조화하며 강력한 기능을 구현했습니다. 하지만 우리가 만든 프로그램들은 한 가지 치명적인 약점을 가지고 있습니다. 바로 프로그램이 종료되는 순간, 변수에 저장했던 모든 데이터가 공기 중으로 사라진다는 것입니다.

계산 결과나 사용자의 입력, 프로그램의 상태를 나중에도 다시 사용하고 싶다면 어떻게 해야 할까요? 해답은 데이터를 컴퓨터의 저장 공간, 즉 파일(File)에 기록해두는 것입니다.

이번 글에서는 프로그램의 데이터를 영구적으로 보존하는 기술인 파일 입출력(File Input/Output)에 대해 알아보겠습니다. 파이썬을 이용해 파일을 만들고, 파일에 데이터를 쓰고, 파일로부터 데이터를 읽어오는 방법을 배울 것입니다.

파일 다루기의 기본, open 함수

파이썬에서 파일을 다루기 위한 첫걸음은 내장 함수인 open()을 사용하는 것입니다. open() 함수는 특정 파일을 열고, 그 파일에 대한 작업을 수행할 수 있는 ‘파일 객체’를 반환해줍니다.

open() 함수는 기본적으로 두 개의 중요한 정보를 필요로 합니다.

  1. 파일 경로: 열고자 하는 파일의 이름 또는 경로.
  2. 파일 열기 모드(mode): 파일을 어떤 목적으로 열 것인지를 지정합니다.

가장 기본적인 파일 열기 모드는 다음과 같습니다.

  • 'w' (Write Mode): 쓰기 모드. 파일에 내용을 쓸 때 사용합니다.
    • 파일이 존재하지 않으면 새로 생성합니다.
    • 파일이 이미 존재하면 기존의 모든 내용을 지우고 처음부터 새로 씁니다. (매우 중요!)
  • 'r' (Read Mode): 읽기 모드. 파일의 내용을 읽을 때 사용합니다.
    • 파일이 존재하지 않으면 오류가 발생합니다.
  • 'a' (Append Mode): 추가 모드. 파일의 기존 내용 끝에 새로운 내용을 덧붙일 때 사용합니다.
    • 파일이 존재하지 않으면 새로 생성합니다.

파일 작업을 마친 후에는 반드시 close() 메소드를 호출하여 파일을 닫아주는 것이 중요합니다. 이는 변경된 내용을 안전하게 저장하고, 파일이 사용 중인 시스템 자원을 해제하기 위함입니다.

파일에 데이터 쓰기 (Write)

먼저 간단한 텍스트 파일을 만들고 내용을 써보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 1. 'my_file.txt'를 쓰기 모드('w')로 엽니다.
f = open('my_file.txt', 'w')

# 2. write() 메소드를 이용해 파일에 문자열을 씁니다.
f.write("Hello, File!\n") # '\n'은 줄바꿈을 의미합니다.
f.write("This is my first file.\n")

# 3. 파일 작업을 마쳤으므로 반드시 닫아줍니다.
f.close()

print("파일 쓰기가 완료되었습니다.")```
 코드를 실행하면, 코드가 실행된 폴더에 `my_file.txt`라는 파일이 생성되고  안에  줄의 문자열이 저장된 것을 확인할  있습니다.

## 더 안전하고 편리한 방법: with 문

파일을 열고 나서 `close()` 호출하는 것을 잊어버리는 실수는 매우 흔하게 발생합니다. 만약 파일을 닫지 않으면 데이터가 제대로 저장되지 않거나 다른 예기치 않은 문제를 일으킬  있습니다.

파이썬은 이러한 실수를 방지할  있는  안전하고 간결한 방법을 제공하는데, 바로 `with` 문입니다.

```python
with open('my_file_with.txt', 'w') as f:
    f.write("The 'with' statement is much safer.\n")
    f.write("It automatically closes the file.\n")

print("'with' 문을 사용한 파일 쓰기 완료.")

with 블록 안에서 파일 작업을 수행하면, 블록을 벗어나는 순간 파이썬이 자동으로 파일을 닫아줍니다. 코드가 더 간결해지고 안정성도 높아지므로, 파일을 다룰 때는 항상 with 문을 사용하는 것이 좋습니다.

파일에서 데이터 읽기 (Read)

이제 파일에 저장된 데이터를 프로그램으로 읽어오는 방법을 알아보겠습니다.

1. 파일 전체를 한 번에 읽기: read()

1
2
3
with open('my_file_with.txt', 'r') as f:
    content = f.read()
    print(content)

read() 메소드는 파일의 전체 내용을 하나의 커다란 문자열로 읽어옵니다. 파일의 크기가 작을 때 간편하게 사용할 수 있습니다.

2. 한 줄씩 처리하기: for 반복문

파일의 내용이 길 경우, 한 줄씩 차례대로 읽어와서 처리하는 것이 더 효율적입니다. 파일 객체는 for문과 함께 사용될 수 있습니다.

1
2
3
4
5
6
with open('my_file_with.txt', 'r') as f:
    print("--- 한 줄씩 읽기 ---")
    for line in f:
        # print(line)을 하면 줄바꿈 문자가 있어 한 줄씩 더 띄워집니다.
        # strip() 메소드로 양쪽 공백 및 줄바꿈 문자를 제거할 수 있습니다.
        print(line.strip())

이 방법은 파일을 한 줄씩 메모리에 올리기 때문에, 매우 큰 파일을 다룰 때도 메모리 문제 없이 효율적으로 처리할 수 있습니다.

마무리하며

이번 글에서는 프로그램의 데이터를 파일에 영구적으로 저장하고 다시 읽어오는 파일 입출력에 대해 배웠습니다. open() 함수와 'w', 'r', 'a' 모드를 이해하고, close()를 잊지 않도록 도와주는 with 문의 중요성을 확인했습니다. 또한 write()로 데이터를 쓰고, read()for문을 이용해 데이터를 읽는 방법을 익혔습니다.

이제 우리는 프로그램의 생명주기를 넘어 데이터를 보존할 수 있게 되었습니다. 사용자의 설정을 저장하거나, 작업 로그를 남기거나, 데이터 분석을 위해 대량의 데이터를 처리하는 등 훨씬 더 실용적인 프로그램을 만들 수 있는 기반을 갖춘 것입니다.

지금까지 우리는 숫자, 문자열, 리스트와 같은 데이터들을 다루었습니다. 하지만 ‘이름: 홍길동’, ‘나이: 30’ 과 같이 이름표(Key)와 값(Value)이 짝을 이루는 데이터를 다뤄야 한다면 어떻게 해야 할까요? 다음 글에서는 이러한 연관 데이터를 효율적으로 관리하는 딕셔너리(Dictionary) 자료구조에 대해 알아보겠습니다.

This post is licensed under CC BY 4.0 by the author.