Chapter 24. 파일 다루기

IT 지식 / Python·2026.08.27
FILE HANDLING
Chapter 24. 파일 다루기
파일 다루기 기능을 통해 사용자가 파일을 선택하고 저장하는 방법을 알아봅니다.

24.1 파일 다루기란?

GUI 프로그램에서는 사용자가 직접 파일을 선택하거나 저장할 수 있는 기능이 필요합니다.

예를 들어,

  • 메모장에서 문서를 열기
  • 게시글 저장하기
  • 이미지 선택하기
  • 사진 업로드하기

이러한 기능은 모두 파일 다루기 기능을 이용합니다. Tkinter에서는 filedialog 모듈을 사용하여 파일 선택 창과 저장 창을 쉽게 만들 수 있습니다.

파일 관련 기능

기능 설명
파일 열기 기존 파일 선택
파일 저장 새로운 파일 저장
이미지 선택 이미지 파일 선택

filedialog 가져오기

Python
from tkinter import filedialog
24.2 파일 열기

사용자가 원하는 파일을 선택하도록 하는 기능입니다.

파일 선택 창

Python
from tkinter import *
from tkinter import filedialog

window = Tk()

filename = filedialog.askopenfilename()

print(filename)

window.mainloop()

실행하면 파일 선택 창이 나타납니다.

TXT 파일만 선택

Python
filename = filedialog.askopenfilename(
    filetypes=[
        ("Text File","*.txt")
    ]
)

여러 형식 선택

Python
filename = filedialog.askopenfilename(
    filetypes=[
        ("Text File","*.txt"),
        ("Python","*.py"),
        ("All Files","*.*")
    ]
)

선택한 파일 출력

Python
if filename:
    print(filename)

예시
C:\Python\data\memo.txt

파일 읽기

Python
if filename:
    with open(
        filename,
        "r",
        encoding="utf-8"
    ) as file:
        print(file.read())
24.3 파일 저장

사용자가 원하는 이름으로 파일을 저장하는 기능입니다.

저장 창

Python
filename = filedialog.asksaveasfilename()

TXT 저장

Python
filename = filedialog.asksaveasfilename(
    defaultextension=".txt",
    filetypes=[
        ("Text File","*.txt")
    ]
)

파일 저장

Python
if filename:
    with open(
        filename,
        "w",
        encoding="utf-8"
    ) as file:
        file.write("안녕하세요.")

실행 후 hello.txt 파일이 생성됩니다.

Text 내용 저장

Python
content = text.get(
    "1.0",
    END
)

if filename:
    with open(
        filename,
        "w",
        encoding="utf-8"
    ) as file:
        file.write(content)

메모장 프로그램에서 가장 많이 사용하는 방식입니다.

24.4 이미지 선택

이미지 파일을 선택하는 기능입니다. 회원 사진, 상품 이미지, 게시판 첨부파일 등에 많이 사용됩니다.

이미지 선택

Python
filename = filedialog.askopenfilename(
    filetypes=[
        ("Image","*.png *.jpg *.jpeg *.gif")
    ]
)

print(filename)

선택한 이미지 출력

Python
from tkinter import *  # tkinter 모듈 가져오기

window = Tk()  # 새로운 윈도우 생성

photo = PhotoImage(  # 이미지 객체 생성
    file="image.png"  # 이미지 파일 경로
)

label = Label(  # 레이블 위젯 생성
    window,  # 부모 위젯은 window
    image=photo  # 표시할 이미지 설정
)

label.pack()  # 레이블을 윈도우에 추가

window.mainloop()  # 이벤트 루프 시작

PhotoImage는 PNG, GIF 형식을 기본 지원합니다.

JPG 이미지
JPG 이미지는 Pillow(PIL) 라이브러리를 사용합니다.

설치

Command Line
pip install pillow

Pillow 사용

Python
from PIL import Image
from PIL import ImageTk

image = Image.open(filename)

photo = ImageTk.PhotoImage(image)

Label에 표시

Python
label.config(image=photo)
label.image = photo

이미지 미리보기

Python
def openImage():  # 이미지 열기 함수 정의
    filename = filedialog.askopenfilename(  # 파일 선택 대화상자 열기
        filetypes=[  # 파일 형식 지정
            ("Image","*.jpg *.png *.jpeg")  # 이미지 파일 형식
        ]
    )
    if filename:  # 파일이 선택되었는지 확인
        image = Image.open(filename)  # 선택한 파일로 이미지 열기
        photo = ImageTk.PhotoImage(image)  # 이미지 객체를 PhotoImage로 변환
        label.config(image=photo)  # 레이블에 이미지 설정
        label.image = photo  # 레이블에 이미지 저장
Python
Button(  # 버튼 위젯 생성
    window,  # 부모 윈도우 지정
    text="이미지 선택",  # 버튼 텍스트 설정
    command=openImage  # 클릭 시 openImage 함수 호출
).pack()  # 버튼 배치
24.5 회원 사진 등록

이름, 사진, 사진미리보기 

24.6 복합 예제
Python
from tkinter import *
from tkinter import filedialog
from PIL import Image, ImageTk

window = Tk()
window.title("이름 / 사진 미리보기")
window.geometry("420x520")

photo_image = None


def choose_photo():
    global photo_image
    path = filedialog.askopenfilename(
        title="사진 선택",
        filetypes=[
            ("이미지 파일", "*.png *.jpg *.jpeg *.gif *.bmp"),
            ("모든 파일", "*.*"),
        ],
    )
    if not path:
        return

    img = Image.open(path)
    img.thumbnail((280, 280))
    photo_image = ImageTk.PhotoImage(img)

    preview.config(image=photo_image, text="")
    photo_path.set(path)


Label(window, text="이름:", font=("맑은 고딕", 11)).pack(anchor="w", padx=24, pady=(16, 4))
entry_name = Entry(window, width=36, font=("맑은 고딕", 11))
entry_name.pack(padx=24)

Label(window, text="사진:", font=("맑은 고딕", 11)).pack(anchor="w", padx=24, pady=(12, 4))
Button(window, text="사진 선택", width=12, command=choose_photo).pack(anchor="w", padx=24)

photo_path = StringVar()
Label(window, textvariable=photo_path, font=("맑은 고딕", 9), fg="gray").pack(
    anchor="w", padx=24, pady=4
)

Label(window, text="사진 미리보기", font=("맑은 고딕", 11)).pack(anchor="w", padx=24, pady=(8, 4))

preview_frame = Frame(window, width=300, height=300, bg="white", relief="solid", bd=1)
preview_frame.pack(padx=24, pady=(0, 16))
preview_frame.pack_propagate(False)

preview = Label(preview_frame, text="사진을 선택하세요", bg="white", font=("맑은 고딕", 10))
preview.pack(expand=True)

window.mainloop()
a computer screen with a bunch of code on it
📌 Chapter 24 핵심 정리
  • GUI 프로그램에서 파일 다루기 기능은 필수적이다.
  • Tkinter의 filedialog 모듈을 사용하여 파일 선택 및 저장 기능을 구현할 수 있다.
  • 파일 열기 및 저장 기능을 통해 사용자가 파일을 쉽게 다룰 수 있다.
  • Pillow 라이브러리를 사용하여 JPG 이미지 파일을 다룰 수 있다.
  • 복합 예제를 통해 파일 다루기 기능을 실제로 구현해 볼 수 있다.

프로그램·홈페이지·강의가 필요하신가요?

프로그램 판매, 무료 다운로드, 홈페이지 제작, IT 강의 상담을 도와드립니다.

상담 신청하기