1강. QFile 간단 실습: 파일 쓰기와 읽기

0. QFile 학습 목표
→ QFile로 텍스트 파일을 만들고 다시 읽는 가장 간단한 실습을 진행합니다.
이번 글에서 할 일
이번 글에서는 QFile큐파일을 사용해서, 프로그램 외부의 텍스트 파일에 문자열 데이터 저정 합니다.
처음부터 GUI를 만들지 않습니다.
먼저 콘솔에서 sample.txt 파일을 만들고, 데이터를 저장하고, 그 파일의 내용을 다시 읽어 봅니다.
| 구분 | 내용 |
| 핵심 개념 | QFile로 파일을 열고, QTextStream으로 텍스트를 쓰고 읽는 기본 흐름을 이해합니다. |
| 실습 준비 | Python과 PySide6가 설치된 환경에서 콘솔 기준으로 실습합니다. |
| 최종 목표 | sample.txt 파일을 만들고, 문자열을 저장하고, 저장된 내용을 다시 읽어서 콘솔에 출력합니다. |
이번 단계의 핵심: 처음에는 모든 옵션을 외우려고 하지 말고, QFile 생성 → open() → QTextStream 사용 → close() 흐름과 구조만 익히면 됩니다.
1. 파일을 코드로 다루려면 무엇이 필요할까?
→ 파일을 만들고 읽기 위해 필요한 기본 흐름을 먼저 확인합니다.
1.1 우리가 만들 기능
이번 강의에서 만들 기능은 아주 간단합니다.
먼저 텍스트 파일에 글을 저장합니다.
그 다음 저장된 파일을 다시 읽어서 콘솔에 출력합니다.
| 단계 | 설명 |
| 1단계 | sample.txt 파일을 만듭니다. |
| 2단계 | 파일 안에 두 줄의 텍스트를 저장합니다. |
| 3단계 | 저장된 파일을 다시 읽습니다. |
| 4단계 | 읽은 내용을 콘솔에 출력합니다. |
1.2 파일 처리의 기본 흐름
파일을 다룰 때는 보통 다음 순서로 진행합니다.
파일 객체 만들기
↓
파일 열기
↓
파일에 쓰기 또는 파일에서 읽기
↓
파일 닫기
QFile을 사용할 때도 같은 흐름입니다.
다만 파일을 열 때는 읽기 모드인지, 쓰기 모드인지 같은 옵션을 함께 지정해야 합니다.
| 도구 | 역할 |
| QFile | 파일을 열고 닫는 역할을 합니다. |
| QIODevice | 파일을 읽기 모드로 열지, 쓰기 모드로 열지 정합니다. |
| QTextStream | 문자열을 파일에 쓰거나 파일에서 읽기 쉽게 도와줍니다. |
문제의 핵심: 파일 처리는 어렵게 보이지만, 실제로는 파일 만들기 → 열기 → 쓰기/읽기 → 닫기 순서만 이해하면 됩니다.
2. sample.txt에 글을 쓰고 다시 읽어보기
→ 가장 간단한 코드로 텍스트 파일을 만들고, 저장된 내용을 다시 확인합니다.
2.1 파일에 텍스트 쓰기
먼저 write_file.py 파일을 만들고 아래 코드를 작성합니다.
이 코드는 sample.txt 파일을 만들고, 그 안에 두 줄의 텍스트를 저장합니다.

# write_file.py
from PySide6.QtCore import QFile, QIODevice, QTextStream
file = QFile("sample.txt")
if file.open(QIODevice.OpenModeFlag.WriteOnly | QIODevice.OpenModeFlag.Text):
stream = QTextStream(file)
stream << "첫 번째 줄입니다.\n"
stream << "두 번째 줄입니다."
file.close()
print("파일 쓰기 완료!")
else:
print("파일을 열 수 없습니다.")
코드를 실행하면 현재 폴더에 sample.txt 파일이 만들어집니다.
파일 안에는 아래와 같은 내용이 저장됩니다.
첫 번째 줄입니다.
두 번째 줄입니다.
2.2 파일에서 텍스트 읽기
이번에는 방금 만든 sample.txt 파일을 다시 읽어 봅니다.
read_file.py 파일을 만들고 아래 코드를 작성합니다.

# read_file.py
from PySide6.QtCore import QFile, QIODevice, QTextStream
file = QFile("sample.txt")
if file.open(QIODevice.OpenModeFlag.ReadOnly | QIODevice.OpenModeFlag.Text):
stream = QTextStream(file)
content = stream.readAll()
file.close()
print("파일 내용:")
print(content)
else:
print("파일을 읽기 모드로 열 수 없습니다.")
코드를 실행하면 콘솔에 파일 내용이 출력됩니다.
파일 내용:
첫 번째 줄입니다.
두 번째 줄입니다.
2.3 쓰기와 읽기 차이 확인
쓰기 코드와 읽기 코드는 거의 비슷합니다.
가장 큰 차이는 파일을 여는 모드입니다.
| 구분 | 사용 코드 |
| 파일 쓰기 | QIODevice.OpenModeFlag.WriteOnly | QIODevice.OpenModeFlag.Text |
| 파일 읽기 | QIODevice.OpenModeFlag.ReadOnly | QIODevice.OpenModeFlag.Text |
| 텍스트 쓰기 | stream << "문자열" |
| 텍스트 읽기 | stream.readAll() |
핵심 확인: 파일에 쓸 때는 WriteOnly, 파일에서 읽을 때는 ReadOnly를 사용합니다. Text는 텍스트 파일을 다룰 때 함께 붙이는 옵션입니다.
3. QFile 코드 흐름 자세히 살펴보기
→ QFile 코드가 어떤 순서로 실행되는지 한 단계씩 분석합니다.
3.1 파일 쓰기 흐름
먼저 파일 쓰기 코드는 다음 순서로 실행됩니다.
QFile 객체 생성
↓
WriteOnly + Text 모드로 파일 열기
↓
QTextStream 생성
↓
문자열을 파일에 쓰기
↓
파일 닫기
↓
완료 메시지 출력
코드에서 중요한 줄은 아래와 같습니다.
| 코드 | 역할 |
| file = QFile("sample.txt") | sample.txt 파일을 다루기 위한 QFile 객체를 만듭니다. |
| file.open(...) | 실제로 파일을 엽니다. |
| QTextStream(file) | 파일에 문자열을 쉽게 쓰기 위한 스트림을 만듭니다. |
| stream << "문자열" | 파일에 텍스트를 씁니다. |
| file.close() | 파일 사용을 끝내고 닫습니다. |
3.2 파일 읽기 흐름
파일 읽기 코드도 구조는 거의 같습니다.
다만 파일을 여는 모드와 스트림 사용 방식이 다릅니다.
QFile 객체 생성
↓
ReadOnly + Text 모드로 파일 열기
↓
QTextStream 생성
↓
readAll()로 전체 내용 읽기
↓
파일 닫기
↓
콘솔에 내용 출력
| 코드 | 역할 |
| ReadOnly | 파일을 읽기 전용으로 엽니다. |
| Text | 텍스트 파일 모드로 엽니다. |
| stream.readAll() | 파일의 전체 내용을 문자열로 읽습니다. |
| print(content) | 읽은 내용을 콘솔에 출력합니다. |
3.3 헷갈릴 수 있는 부분
처음 배울 때는 QFile과 QTextStream의 역할이 헷갈릴 수 있습니다.
둘은 같은 역할을 하는 것이 아닙니다.
| 구분 | 쉽게 이해하기 |
| QFile | 파일 문을 열고 닫는 역할입니다. |
| QTextStream | 열린 파일 안에 글자를 쓰거나 읽는 통로입니다. |
| open() | 파일에 실제로 접근하기 시작하는 코드입니다. |
| close() | 파일 사용을 끝내는 코드입니다. |
주의할 점: QFile("sample.txt")만 작성했다고 파일이 열린 것은 아닙니다. 실제 파일 접근은 open()을 호출할 때 시작됩니다.
4. Python open()과 QFile 비교하며 정리하기
→ Python 내장 open() 방식과 QFile 방식을 비교하고 핵심을 정리합니다.
4.1 Python open()과 QFile 비교
Python에서는 기본적으로 open() 함수로 파일을 다룰 수 있습니다.
그런데 Qt 기반 프로그램을 만들 때는 QFile을 사용하면 나중에 GUI 기능과 연결하기 쉽습니다.
| 구분 | Python open() | QFile |
| 사용 목적 | 일반 Python 파일 처리에 사용합니다. | Qt 프로그램 안에서 파일을 다룰 때 사용합니다. |
| 쓰기 방식 | file.write("문자열") 형태를 사용합니다. | QTextStream과 함께 stream << "문자열" 형태를 사용할 수 있습니다. |
| GUI 연결 | 직접 연결 코드를 작성해야 합니다. | QFileDialog, QTextEdit 같은 Qt 위젯과 자연스럽게 연결하기 좋습니다. |
| 이번 강의 역할 | 비교 대상으로만 봅니다. | 앞으로 GUI 파일 처리 기능의 기본 도구로 사용합니다. |
4.2 최종 정리
이번 글에서는 QFile을 사용해서 텍스트 파일을 쓰고 읽는 가장 간단한 실습을 진행했습니다.
| 핵심 내용 | 정리 |
| 문제 파악 | 파일을 다룰 때는 열기, 쓰기/읽기, 닫기 순서가 필요하다는 것을 확인했습니다. |
| 문제 해결 | QFile과 QTextStream으로 sample.txt 파일에 텍스트를 쓰고 다시 읽었습니다. |
| 코드 분석 | QFile은 파일을 열고 닫고, QTextStream은 텍스트를 쓰고 읽는 역할을 한다는 것을 확인했습니다. |
| 다음 단계 | 다음 강의에서는 QFile.open()과 QIODevice 플래그를 더 자세히 살펴봅니다. |
기억할 문장: QFile은 파일을 열고 닫는 도구이고, QTextStream은 열린 파일에 텍스트를 쓰고 읽는 도구입니다.
참고. 공식 문서로 확인하기
→ QFile, QIODevice, QTextStream의 자세한 내용은 공식 문서에서 확인합니다.
참고 문서
이번 글에서 사용한 클래스는 PySide6의 QtCore 모듈에 포함되어 있습니다.
참고: 이번 강의에서는 가장 간단한 파일 쓰기와 읽기만 실습했습니다. 다음 강의에서는 open()에 들어가는 ReadOnly, WriteOnly, Append, Text 같은 플래그를 자세히 비교합니다.