본문 바로가기
Python

[Python] 간단한 메모장 프로그램 만들기

by teamnova 2025. 2. 11.
728x90

Python은 파일을 읽고 쓰는 작업을 매우 간단하게 처리할 수 있습니다.

이번 글에서는 파일 처리의 기본 개념을 배우고, 이를 활용해 간단한 메모장 프로그램을 만들어 보겠습니다.

 

1. Python의 파일 처리 기본 개념

Python에서 파일을 다룰 때는 open() 함수를 사용합니다. 파일을 열 때는 모드를 지정해야 하며, 모드에 따라 파일을 읽거나 쓰는 방식이 달라집니다.

파일 모드 설명

  • r (read): 읽기 전용 모드. 파일이 존재하지 않으면 오류가 발생합니다.
  • w (write): 쓰기 전용 모드. 파일이 존재하면 내용을 덮어쓰고, 없으면 새로 만듭니다.
  • a (append): 추가 모드. 파일이 존재하면 끝에 내용을 추가하고, 없으면 새로 만듭니다.

2. with 구문

Python에서는 파일을 다룰 때 with 구문을 사용하는 것이 일반적입니다. with 구문은 파일을 열고 작업이 끝난 후 자동으로 파일을 닫아주는 역할을 합니다. with 구문을 사용하면 실수로 파일을 닫지 않아 발생할 수 있는 문제를 방지할 수 있습니다.

with 구문의 장점

  • 자동 자원 관리: 파일을 닫는 작업(close())을 명시적으로 하지 않아도 됩니다.
  • 코드 가독성 향상: 파일 처리와 관련된 코드가 블록으로 묶여 있어 가독성이 높습니다.

예제: with 구문 사용

# sample.txt 파일 읽기
with open("sample.txt", "r") as file:
    content = file.read()
    print(content)
# 파일은 작업이 끝난 후 자동으로 닫힙니다.

예제: with 구문 없이 파일 열기

# sample.txt 파일 읽기 (with 구문 미사용)
file = open("sample.txt", "r")
content = file.read()
print(content)
file.close()  # 파일을 명시적으로 닫아야 합니다.

 

3. 간단한 메모장 프로그램 만들기

이제 배운 내용을 활용해 간단한 메모장 프로그램을 만들어 보겠습니다. 이 프로그램은 다음과 같은 기능을 제공합니다.

  1. 사용자가 입력한 메모를 파일에 저장
  2. 저장된 메모를 읽어 출력
  3. 프로그램 종료
memo_pad.py
import os  # 파일 및 디렉토리 작업을 위한 모듈

# 메모장 프로그램
def memo_pad():
    print("== 나만의 메모장 ==")
    print("1. 메모 작성")
    print("2. 메모 읽기")
    print("3. 종료")

    while True:
        choice = input("원하는 작업을 선택하세요 (1/2/3): ")
        
        if choice == "1":
            # 메모 작성
            title = input("메모의 제목을 입력하세요: ")
            filename = title.replace(" ", "_") + ".txt"  # 파일명 생성 (공백을 '_'로 대체)
            content = input("메모 내용을 입력하세요: ")

            with open(filename, "w") as file:  # 쓰기 모드로 파일 열기
                file.write(content)
            print(f"'{title}' 제목의 메모가 저장되었습니다.\n")
        
        elif choice == "2":
            # 메모 읽기
            files = [f for f in os.listdir() if f.endswith(".txt")]  # 현재 디렉토리에서 .txt 파일 목록 가져오기
            
            if not files:
                print("저장된 메모가 없습니다. 먼저 메모를 작성해보세요.\n")
                continue
            
            print("\n저장된 메모 목록:")
            for idx, file in enumerate(files, start=1):
                print(f"{idx}. {file.replace('_', ' ').replace('.txt', '')}")  # 파일명에서 '_'와 '.txt' 제거 후 출력
            
            try:
                file_choice = int(input("읽고 싶은 메모의 번호를 입력하세요: "))
                if 1 <= file_choice <= len(files):
                    selected_file = files[file_choice - 1]
                    with open(selected_file, "r") as file:
                        print("\n메모 내용:")
                        print(file.read())
                else:
                    print("잘못된 번호입니다. 다시 시도하세요.\n")
            except ValueError:
                print("숫자를 입력하세요.\n")
        
        elif choice == "3":
            # 종료
            print("프로그램을 종료합니다.")
            break
        
        else:
            print("잘못된 입력입니다. 다시 시도하세요.\n")

# 프로그램 실행
memo_pad()