728x90

1. 학습 목표

더보기

학습 로드맵:

  • Step 1 QFile.open() & QIODevice 플래그 이해하기
  • Step 2 콘솔에서 QFile 맛보기 (순수 Python 스크립트)
  • Step 3 PySide6 GUI 프로젝트 만들기 & 기본 창 띄우기
  • Step 4 GUI에서 “파일 쓰기/읽기” 버튼 구현
  • Step 5 파일 복사 기능까지 확장

이 단계에서 목표는:

  • QFile 이 어떤 역할을 하는지 감 잡기
  • QFile.open() 의 열기 모드 플래그 사용법 이해
  • QTextStream 으로 텍스트를 읽고/쓰는 기본 패턴 익히기
  • 내장 open() 이 아니라 QFile 을 쓰는 Qt스럽게 파일 다루는 방법 맛보기
  • 아직 GUI 없이, 콘솔 파이썬 스크립트에서만 연습

 

3. 콘솔에서 파일 쓰기 (Write) 

더보기
# write.py

from PySide6.QtCore import QFile, QIODevice, QTextStream

file_path = "example.txt"

# 파일이 없는 경우에만 새로 생성
if not QFile.exists(file_path):
    file = QFile(file_path)

    # 쓰기 전용 + 텍스트 모드로 열기
    if file.open(QIODevice.WriteOnly | QIODevice.Text):
        # QTextStream 생성 (텍스트 쓰기 도우미)
        stream = QTextStream(file)
        # 필요하면 인코딩 지정 가능 (환경에 따라 생략 가능)
        # stream.setEncoding("UTF-8")

        # 파일에 한 줄씩 쓰기 (한글 메시지 포함)
        stream << "안녕하세요, 이것은 첫 번째 테스트 줄입니다.\n"
        stream << "이 줄은 두 번째 줄입니다."

        file.close()
        print(f"'{file_path}' 파일이 생성되고 내용이 저장되었습니다.")
    else:
        print("파일을 쓰기 모드로 열 수 없습니다.")
else:
    print(f"'{file_path}' 파일이 이미 존재합니다. 새로 생성하지 않습니다.")
  • QFile.exists(path)
    → 파일 존재 여부를 간단히 확인할 수 있는 정적 메서드

  • file.open(QIODevice.WriteOnly | QIODevice.Text)
    → 텍스트 쓰기 모드로 파일 열기

  • QTextStream
    → stream << "문자열" 형식으로 파일에 텍스트를 쉽게 쓸 수 있게 도와주는 클래스

  • file.close()
    → 작업이 끝나면 반드시 닫아 주는 습관

 

4. 콘솔에서 파일 읽기 (Read)

더보기
# read.py

from PySide6.QtCore import QFile, QIODevice, QTextStream

file_path = "example.txt"

if QFile.exists(file_path):
    file = QFile(file_path)

    # 읽기 전용 + 텍스트 모드로 열기
    if file.open(QIODevice.ReadOnly | QIODevice.Text):
        stream = QTextStream(file)

        # 파일 전체 읽기
        content = stream.readAll()

        print("파일 내용은 다음과 같습니다:")
        print(content)

        file.close()
    else:
        print("파일을 읽기 모드로 열 수 없습니다.")
else:
    print(f"'{file_path}' 파일이 존재하지 않습니다.")
  • readAll()
    → 파일 전체 내용을 한 번에 문자열로 반환

  • QIODevice.ReadOnly | QIODevice.Text
    → 읽기 + 텍스트 모드로 열기

  • if QFile.exists(file_path)
    → 없는 파일을 열려고 할 때의 오류를 미리 방지

  • 작은 파일 → readAll() 로 한 번에 읽는 것이 편함
  • 매우 큰 파일 → 메모리 절약을 위해 readLine() + 반복문 사용 줄 단위로 읽기

 

5. 콘솔에서 파일 복사 (Copy)

더보기
# copy.py

from PySide6.QtCore import QFile

src_path = "example.txt"
dst_path = "example_copy.txt"

if QFile.exists(src_path):
    src_file = QFile(src_path)

    # 인스턴스 메서드 사용 예시
    if src_file.copy(dst_path):
        print(f"'{src_path}' 파일이 '{dst_path}' 로 복사되었습니다.")
    else:
        print("파일 복사에 실패했습니다. 같은 이름의 파일이 이미 있을 수도 있습니다.")
else:
    print(f"원본 파일 '{src_path}' 이(가) 존재하지 않습니다.")
  • QFile.copy(원본, 대상) 은 정적 메서드 버전도 있고
    src_file.copy(대상) 은 인스턴스 메서드 버전입니다.

  • 대상 파일이 이미 존재하면 실패하는 경우가 있으니,
    진짜 앱에서는 QFile.exists(dst_path) 체크 후 삭제/덮어쓰기 여부를 사용자에게 물어보는 식으로 확장 가능

 

6. 다음 단계

더보기

지금까지 콘솔 환경에서

  1. QFile 로 파일 열기 / 닫기 / 존재 여부 확인
  2. QIODevice 플래그(ReadOnly, WriteOnly, Append, Text) 사용
  3. QTextStream 으로 텍스트 쓰기 / 읽기 (전체, 줄 단위)
  4. QFile.copy() 로 파일 복사

까지 연습했습니다.

 

 

 

 

이 단계의 핵심

  • QFile 은 Qt에 특화된 파일 입출력 도구로
  • 나중에 QFileDialog, QTextEdit, QMainWindow 등과 결합해도
    코드를 거의 그대로 재사용할 수 있고
  • 지금 만든 콘솔용 함수들은 Step 3~5에서 GUI 버튼에 그대로 붙일 수 있습니다.