파이썬에서 텍스트 파일을 읽고 저장하는 방법

파이썬에서 텍스트 파일을 읽고 저장하는 방법을 open 함수부터 실전 예제까지 단계별로 정리합니다.
파이썬을 배우다 보면 반드시 만나게 되는 기능이 있습니다. 바로 파일 입출력(File IO)입니다.
우리가 프로그램을 실행하면 화면에 출력되는 값은 메모리 안에서만 존재합니다. 프로그램이 종료되면 데이터도 함께 사라집니다.
그렇다면 이런 생각이 들 수 있습니다.
“계산한 결과를 저장하고 싶다면 어떻게 해야 할까요?”
“사용자가 입력한 데이터를 다시 불러오려면 어떻게 해야 할까요?”
이때 사용하는 기능이 바로 파일 읽기와 쓰기입니다. 파일 입출력은 단순히 텍스트를 저장하는 기능이 아닙니다.
데이터 분석, 로그 기록, 자동화 스크립트, 웹 크롤링, 서버 기록 등 거의 모든 실무 영역에서 사용됩니다.
이 글에서는 다음 내용을 차근차근 정리합니다.
- 파일 입출력의 기본 개념
- open 함수 구조
- 읽기 모드와 쓰기 모드 차이
- 실전 예제 5가지
- 자주 발생하는 오류 해결 방법
중간 단계를 절대 생략하지 않고 하나씩 정리하겠습니다.
파일 입출력이란 무엇인가
파일 입출력은 말 그대로 파일에 데이터를 쓰거나 읽는 과정입니다.
쓰기(Write): 메모리에 있는 데이터를 파일로 저장
읽기(Read): 파일에 저장된 데이터를 메모리로 불러오기
이 과정은 항상 세 단계를 거칩니다.
파일 열기 > 작업 수행 > 파일 닫기 이 세 단계가 반드시 필요합니다.
open 함수 구조
파이썬에서 파일을 다룰 때 사용하는 기본 함수는 open()입니다.
형태는 다음과 같습니다.
open(파일이름, 모드)
f = open("test.txt", "w")
여기서 중요한 것은 모드(mode)입니다.
파일 모드 종류
r (read)
읽기 모드입니다. 파일이 반드시 존재해야 합니다.
w (write)
쓰기 모드입니다. 파일이 없으면 새로 생성합니다. 파일이 있으면 기존 내용은 모두 삭제됩니다.
a (append)
추가 모드입니다. 기존 내용 뒤에 데이터를 추가합니다.
x
파일이 없을 때만 생성합니다.
파일 닫기
파일 작업이 끝나면 반드시 닫아야 합니다.
f.close()
파일을 닫지 않으면 데이터가 저장되지 않을 수도 있습니다.
with 문 사용 (권장 방식)
실무에서는 with 문을 사용합니다.
with open("test.txt", "w") as f:
f.write("Hello")
이 방식은 자동으로 파일을 닫아줍니다. 따라서 실무에서는 이 방법을 사용하는 것이 안전합니다.
텍스트 파일에 한 줄 저장하기 (w 모드)
목표: hello.txt에 “안녕하세요” 한 줄을 저장합니다.
1. 파일이 저장될 위치를 먼저 이해합니다.
- "hello.txt"처럼 폴더 경로 없이 파일명만 쓰면, 보통 **현재 작업 폴더(현재 실행 위치)**에 생성됩니다.
- 예: VSCode에서 실행하면 열어둔 프로젝트 폴더 안에 생깁니다.
2. 쓰기 모드(w)로 파일을 엽니다.
with open("hello.txt", "w", encoding="utf-8") as f:
- "w"는 쓰기 모드입니다.
- 파일이 없으면 새로 만들고, 파일이 있으면 기존 내용을 지우고 새로 씁니다.
- encoding="utf-8"은 한글이 깨지지 않게 하기 위해 넣습니다.
3. write로 문자열을 씁니다.
f.write("안녕하세요\n")
- \n은 줄 바꿈입니다.
- 줄 바꿈이 없으면 뒤에 쓰는 내용이 같은 줄에 이어집니다.
4. 실행 후 결과를 확인합니다.
hello.txt를 열면 아래처럼 보입니다.
안녕하세요
여러 줄 저장하기 (write 여러 번)
multi.txt에 여러 줄을 저장합니다.
1. 쓰기 모드로 파일을 엽니다.
with open("multi.txt", "w", encoding="utf-8") as f:
2. write를 여러 번 호출해 줄을 만듭니다.
f.write("첫 줄\n")
f.write("둘째 줄\n")
f.write("셋째 줄\n")
3. 왜 이렇게 쓰는지 이해합니다.
write()는 문자열 하나를 파일에 씁니다.
그래서 여러 줄이면 write()를 여러 번 쓰는 방식이 자연스럽습니다.
첫 줄
둘째 줄
셋째 줄
파일 전체를 한 번에 읽기 (read)
multi.txt 전체 내용을 한 번에 읽어서 출력합니다.
1. 읽기 모드(r)로 엽니다.
with open("multi.txt", "r", encoding="utf-8") as f:
"r"은 읽기 모드입니다.
파일이 없으면 에러가 납니다.
2. read()로 전체를 가져옵니다.
data = f.read()
data에는 파일 내용이 하나의 문자열로 들어갑니다.
3. 출력합니다.
print(data)
4. 결과 이해
파일 자체에 줄바꿈이 들어 있으므로 그대로 출력됩니다.
한 줄씩 읽기 (for line in f)
파일을 줄 단위로 처리합니다.
1. 읽기 모드로 엽니다.
with open("multi.txt", "r", encoding="utf-8") as f:
2. 파일 객체를 반복문으로 순회합니다.
for line in f:
print(line.strip())
3. strip()을 쓰는 이유
- line은 보통 끝에 \n이 포함됩니다.
- print()도 줄 바꿈을 하기 때문에 줄이 비어 보일 수 있습니다.
- 그래서 strip()으로 끝의 공백/줄 바꿈을 제거합니다.
기존 파일에 내용 추가하기 (a 모드)
기존 내용은 유지하고 뒤에 덧붙입니다.
1. append 모드(a)로 엽니다.
with open("multi.txt", "a", encoding="utf-8") as f:
2. 추가로 쓸 내용을 write 합니다.
f.write("추가된 내용\n")
3. 결과 확인
기존 3줄 아래에 새 줄이 붙습니다.
리스트 내용을 파일에 저장하기 (반복 + write)
파이썬 리스트를 파일의 여러 줄로 저장합니다.
1. 저장할 데이터를 준비합니다.
items = ["사과", "바나나", "포도"]
2. 쓰기 모드로 파일을 엽니다.
with open("fruits.txt", "w", encoding="utf-8") as f:
3. 반복문으로 한 줄씩 씁니다.
for item in items:
f.write(item + "\n")
왜 이렇게 쓰는가
- 리스트를 그대로 write(items) 하면 에러가 납니다.
- write()는 문자열만 받기 때문입니다.
- 그래서 요소를 하나씩 문자열로 만들어 줄 바꿈까지 붙여 저장합니다.
숫자(정수)를 파일에 저장하기 (str 변환)
숫자 데이터를 파일에 저장합니다.
1. 숫자 준비
score = 95
2. 파일 열기
with open("score.txt", "w", encoding="utf-8") as f:
3. 숫자를 문자열로 바꿔서 씁니다.
f.write(str(score) + "\n")
왜 str이 필요한가
- f.write(95)는 에러입니다.
- write()는 문자열만 받습니다.
- 숫자는 str()로 바꿔야 파일에 쓸 수 있습니다.
readlines()로 “줄 리스트”로 읽기
파일을 줄 단위 리스트로 가져옵니다.
1. 파일 열기
with open("multi.txt", "r", encoding="utf-8") as f:
2. readlines() 호출
lines = f.readlines()
3. lines의 형태를 이해합니다.
- lines는 이런 리스트가 됩니다.
- 예: ["첫 줄\n", "둘째 줄\n", "셋째 줄\n"]
4. 처리 예시
for i, line in enumerate(lines, start=1):
print(i, line.strip())
writelines()로 여러 줄 한 번에 쓰기 (줄 바꿈 주의)
여러 줄을 한 번에 씁니다.
1. 줄 데이터를 준비합니다. (중요: 줄바꿈 포함)
lines = ["A\n", "B\n", "C\n"]
2. 파일 열기
with open("letters.txt", "w", encoding="utf-8") as f:
3. writelines() 실행
f.writelines(lines)
- writelines()는 자동으로 줄 바꿈을 붙이지 않습니다.
- 그래서 "\n"을 미리 넣어야 줄이 나뉩니다.
파일을 읽어서 “새 파일로 복사하기” (읽기 + 쓰기)
multi.txt를 읽어서 multi_copy.txt로 복사합니다.
1. 원본 파일을 읽기 모드로 엽니다.
with open("multi.txt", "r", encoding="utf-8") as src:
2. 복사 파일을 쓰기 모드로 엽니다.
with open("multi_copy.txt", "w", encoding="utf-8") as dst:
3. 원본 내용을 읽고 복사 파일에 씁니다.
data = src.read()
dst.write(data)
- read()로 원본을 한 번에 가져오고
- write()로 동일한 내용을 새 파일에 쓰면
- 텍스트 파일 복사가 됩니다.
- multi_copy.txt는 multi.txt와 같은 내용을 가집니다.
- 파이썬에서 파일을 열 때 모드를 정확히 선택해야 하는 이유는 무엇인가요?
- 파일 모드는 파일을 어떤 방식으로 다룰지를 결정하는 핵심 설정입니다.
- 파일을 열 때 두 번째 인자로 "r", "w", "a" 같은 모드를 지정하는데, 이 값에 따라 파일의 동작이 완전히 달라집니다.
- 예를 들어 "r" 모드는 읽기 전용이기 때문에 파일이 존재하지 않으면 즉시 오류가 발생합니다.
- 반면 "w" 모드는 파일이 없으면 새로 생성하지만, 이미 존재하면 기존 내용을 모두 삭제합니다. 따라서 기존 데이터가 중요한 경우에는 실수로 "w" 모드를 사용하지 않도록 주의해야 합니다.
- 기존 데이터를 유지하면서 추가만 하려면 "a" 모드를 사용해야 합니다. 예를 들어 로그 파일을 기록할 때는 대부분 "a" 모드를 선택합니다.
- 모드를 잘못 선택하면 데이터 손실이 발생할 수 있기 때문에, 파일을 열기 전에 작업 목적을 먼저 명확히 해야 합니다. 실무에서는 파일 열기 전에 반드시 “읽기인지, 새 작성인지, 추가인지”를 먼저 판단합니다.
- 파일 모드는 단순한 옵션이 아니라 데이터 안전과 직결되는 중요한 설정입니다.
- 파일이 존재하지 않을 때 발생하는 오류는 어떻게 처리하나요?
- 파일이 존재하지 않는 상태에서 "r" 모드로 열면 FileNotFoundError가 발생합니다.
- 이는 파이썬이 읽어야 할 대상 파일을 찾지 못했기 때문입니다. 이 문제를 해결하는 가장 기본적인 방법은 try-except 구문을 사용하는 것입니다.
- 예를 들어 try 블록 안에서 파일을 열고, except 블록에서 오류를 처리할 수 있습니다. 또는 파일이 없을 경우 자동으로 생성되도록 "w" 모드를 사용할 수도 있습니다. 하지만 읽기 작업이라면 먼저 파일 존재 여부를 확인하는 것이 좋습니다.
- 이를 위해 os.path.exists() 함수를 활용할 수 있습니다. 파일이 없으면 사용자에게 안내 메시지를 출력하도록 구성할 수도 있습니다. 실무에서는 프로그램이 갑자기 종료되지 않도록 반드시 예외 처리를 추가합니다.
- 파일 관련 코드는 항상 오류 가능성을 염두에 두고 작성해야 합니다. 안전한 프로그램은 예외를 예상하고 대비하는 코드 구조를 가지고 있습니다.
- encoding="utf-8"을 반드시 지정해야 하는 이유는 무엇인가요?
- 파일을 읽거나 쓸 때 encoding을 지정하는 이유는 문자 인코딩 문제를 방지하기 위해서입니다.
- 특히 한글이 포함된 파일을 처리할 때 인코딩을 명시하지 않으면 오류가 발생할 수 있습니다. 운영체제마다 기본 인코딩이 다르기 때문에 환경이 바뀌면 문제가 생길 수 있습니다.
- 예를 들어 Windows에서는 cp949가 기본일 수 있고, 다른 환경에서는 utf-8이 기본일 수 있습니다. 이 차이로 인해 글자가 깨지거나 UnicodeDecodeError가 발생할 수 있습니다.
- encoding="utf-8"을 명시하면 대부분의 환경에서 안정적으로 동작합니다. 읽기와 쓰기 모두 동일한 인코딩을 사용하는 것이 중요합니다.
- 예를 들어 utf-8로 저장한 파일을 다른 인코딩으로 읽으면 깨질 수 있습니다. 실무에서는 인코딩을 명시하는 것이 기본 원칙입니다. 한글 파일을 다룬다면 encoding 지정은 선택이 아니라 필수에 가깝습니다.
- write() 함수는 왜 문자열만 받을 수 있나요?
- write() 함수는 텍스트 파일에 데이터를 기록하는 함수이며, 내부적으로 문자열 데이터를 처리하도록 설계되어 있습니다.
- 따라서 숫자나 리스트를 그대로 전달하면 TypeError가 발생합니다. 예를 들어 f.write(100)이라고 작성하면 오류가 발생합니다. 이 경우 str(100)처럼 문자열로 변환해야 합니다.
- 이는 파일이 기본적으로 텍스트 데이터를 저장하는 구조이기 때문입니다. 숫자를 파일에 저장하려면 반드시 문자열로 바꿔야 합니다. 리스트의 경우에도 반복문을 사용해 하나씩 문자열로 변환해야 합니다.
- 예를 들어 for 문을 통해 f.write(str(item)) 형태로 저장합니다. 실무에서는 형 변환을 습관적으로 사용하는 것이 안전합니다. 데이터 타입을 명확히 이해하는 것이 중요합니다.
- write()는 텍스트 파일 작업의 기본이므로, 문자열 처리 원리를 정확히 알고 있어야 합니다
- read()와 반복문을 이용한 줄 읽기의 차이는 무엇인가요?
- read()는 파일 전체 내용을 한 번에 문자열로 읽어옵니다. 따라서 파일이 크지 않을 경우에는 편리합니다. 하지만 파일이 매우 큰 경우 메모리 사용량이 급격히 증가할 수 있습니다.
- 반면 반복문을 이용한 줄 단위 읽기는 한 줄씩 처리하기 때문에 메모리 부담이 적습니다. 예를 들어 for line in f: 구조를 사용하면 파일을 한 줄씩 읽을 수 있습니다.
- 로그 파일처럼 데이터가 많은 경우에는 줄 단위 처리가 효율적입니다. 또한 줄 단위 처리는 특정 조건을 검사하며 처리하기에 적합합니다. 예를 들어 특정 단어가 포함된 줄만 출력할 수 있습니다.
- read()는 전체 내용을 분석할 때, 반복문은 부분 처리에 적합합니다. 파일 크기와 처리 목적에 따라 방식을 선택해야 합니다. 대용량 파일을 다룰 때는 반복문 방식이 더 안전합니다.
- append 모드(a)는 언제 사용하는 것이 적절한가요?
- append 모드는 기존 파일의 내용을 유지하면서 새로운 데이터를 추가할 때 사용합니다. 파일을 "a" 모드로 열면 파일이 존재하지 않을 경우 새로 생성되고, 존재할 경우 파일 끝에 이어서 내용을 작성합니다.
- 예를 들어 날짜별 로그를 기록하는 프로그램에서는 기존 데이터를 지우지 않고 계속 쌓아야 하기 때문에 append 모드가 적합합니다. 만약 실수로 "w" 모드를 사용하면 기존 데이터가 모두 삭제됩니다.
- 따라서 기록을 누적해야 하는 경우에는 반드시 "a" 모드를 사용해야 합니다. 예시로 with open("log.txt", "a", encoding="utf-8") as f: 형태로 열 수 있습니다.
- 그런 다음 f.write("기록 내용\n")을 추가하면 파일 맨 아래에 새 내용이 붙습니다. 다만 줄바꿈을 넣지 않으면 이전 줄과 이어질 수 있으므로 "\n"을 적절히 사용해야 합니다.
- 실무에서는 로그, 방문 기록, 실행 결과 저장 등에 append 모드를 자주 활용합니다. 기존 데이터를 보존하면서 새로운 데이터를 쌓는 구조라면 append 모드가 기본 선택입니다.
- 파일 경로를 정확히 지정하는 방법은 무엇인가요?
- 파일 경로를 지정하는 방법은 상대 경로와 절대 경로 두 가지가 있습니다. 파일 이름만 작성하면 현재 실행 중인 작업 폴더에 생성됩니다. 이를 상대 경로라고 합니다.
- 절대 경로는 예를 들어 "C:/Users/사용자/Desktop/test.txt"처럼 전체 위치를 명시하는 방식입니다. Windows에서는 역슬래시 "" 대신 슬래시 "/"를 사용하는 것이 안전합니다.
- 역슬래시는 이스케이프 문자로 인식될 수 있기 때문입니다. 현재 작업 폴더를 확인하려면 os.getcwd()를 사용할 수 있습니다. 파일이 어디에 생성되었는지 헷갈릴 경우 이 함수를 통해 위치를 확인합니다.
- 실무에서는 프로젝트 구조 안에 data 폴더를 따로 만들어 관리하는 경우가 많습니다. 예를 들어 "data/result.txt"처럼 폴더를 명시하면 관리가 쉬워집니다. 파일 경로를 정확히 이해하는 것은 파일 IO의 기본입니다.
- 파일이 이미 존재하는지 확인하는 방법은 무엇인가요?
- 파일 존재 여부를 확인하려면 os 모듈을 사용할 수 있습니다. 먼저 import os를 작성합니다. 그다음 os.path.exists("파일이름")을 호출하면 파일 존재 여부를 True 또는 False로 반환합니다.
- 예를 들어 if os.path.exists("test.txt"):처럼 조건문에 활용할 수 있습니다. 이 방법을 사용하면 읽기 전에 파일 존재 여부를 미리 확인할 수 있습니다.
- 파일이 없다면 새로 생성하거나 안내 메시지를 출력할 수 있습니다. 이는 FileNotFoundError를 예방하는 안전한 방법입니다.
- 실무에서는 사용자 입력 파일을 다룰 때 반드시 존재 여부를 확인합니다. 파일 IO는 항상 예외 상황을 고려해야 합니다. 존재 여부 확인은 안정적인 코드 작성의 기본 단계입니다.
- 파일을 복사하는 가장 간단한 방법은 무엇인가요?
- 텍스트 파일을 복사하는 가장 기본적인 방법은 읽기와 쓰기를 함께 사용하는 것입니다. 먼저 원본 파일을 "r" 모드로 엽니다. 그 다음 복사할 파일을 "w" 모드로 엽니다.
- src.read()로 원본 내용을 읽어옵니다. 그 내용을 dst.write()로 새 파일에 작성합니다. 이 과정을 하나의 with 블록 안에서 처리할 수 있습니다.
- 예를 들어 중첩된 with open 구문을 사용할 수 있습니다. 복사 과정에서 encoding을 동일하게 지정하는 것이 중요합니다. 인코딩이 다르면 문자 깨짐이 발생할 수 있습니다.
- 이 방법은 텍스트 파일 복사의 가장 기본적인 구조입니다. 파일 IO의 원리를 이해하면 복사도 간단히 구현할 수 있습니다.
- 파일에서 특정 단어가 포함된 줄만 출력하려면 어떻게 해야 하나요?
- 특정 단어가 포함된 줄만 출력하려면 반복문과 조건문을 함께 사용합니다. 먼저 파일을 읽기 모드로 엽니다.
- 그 다음 for line in f: 형태로 한 줄씩 읽습니다. if "검색어" in line: 조건을 사용합니다. 조건이 참일 경우에만 print(line.strip())을 실행합니다.
- 이렇게 하면 원하는 단어가 포함된 줄만 출력됩니다. 예를 들어 로그 파일에서 "ERROR"가 포함된 줄만 찾을 수 있습니다. strip()을 사용하면 줄 끝 공백을 제거할 수 있습니다.
- 대소문자 구분이 필요 없다면 line.lower()를 활용할 수 있습니다. 이 방식은 데이터 필터링의 기본입니다. 파일 처리에서 조건 검색은 매우 자주 사용되는 패턴입니다.
- 빈 줄을 제거하고 읽는 방법은 무엇인가요?
- 파일을 읽을 때 빈 줄을 제거하려면 조건문을 추가하면 됩니다. 먼저 파일을 줄 단위로 읽습니다. line.strip()을 사용하면 공백과 줄 바꿈이 제거됩니다. 그다음 if line.strip():처럼 조건을 작성합니다.
- 이 조건은 내용이 있는 줄만 참이 됩니다. 빈 줄은 자동으로 제외됩니다.
- 예를 들어 print(line.strip())으로 출력하면 깔끔한 결과를 얻을 수 있습니다. 데이터 전처리 단계에서 자주 사용되는 방법입니다.
- 빈 줄을 제거하면 분석하기 쉬운 형태가 됩니다. 실무에서는 로그나 데이터 정리 시 기본적으로 적용합니다. 파일 정제 작업의 첫 단계라고 볼 수 있습니다.
- 파일에 줄 번호를 붙여서 출력하려면 어떻게 하나요?
- 줄 번호를 붙이려면 enumerate 함수를 사용합니다. 파일을 읽기 모드로 엽니다.
- for i, line in enumerate(f, start=1): 형태로 작성합니다. start=1을 지정하면 1번부터 번호가 시작됩니다. print(i, line.strip())으로 출력하면 줄 번호와 내용이 함께 표시됩니다.
- 이 방법은 데이터 분석이나 로그 확인 시 유용합니다. 줄 번호는 오류 위치를 찾는 데 도움이 됩니다. strip()을 사용하면 출력이 깔끔해집니다.
- enumerate는 반복문과 함께 자주 사용되는 함수입니다. 파일 IO에서 번호 부여는 매우 실용적인 기능입니다. 데이터 추적과 디버깅에 유용합니다.
- 대용량 파일을 안전하게 읽는 방법은 무엇인가요?
- 대용량 파일은 read()로 한 번에 읽지 않는 것이 좋습니다. 대신 줄 단위로 읽는 반복문 방식을 사용합니다.
- for line in f: 구조는 한 줄씩 메모리에 올립니다. 이 방식은 메모리 사용량이 적습니다. 로그 파일이나 데이터 파일이 수백 MB 이상일 경우 특히 중요합니다.
- read()는 전체를 한 번에 읽기 때문에 부담이 큽니다. 반복문 방식은 스트리밍 처리에 가깝습니다. 처리 속도도 안정적입니다.
- 실무에서는 대용량 파일에 반드시 이 방식을 사용합니다. 파일 크기에 따라 읽기 전략을 달리하는 것이 중요합니다.
- 파일에 날짜와 시간을 함께 기록하려면 어떻게 해야 하나요?
- 날짜와 시간을 기록하려면 datetime 모듈을 사용합니다. 먼저 from datetime import datetime을 작성합니다.
- now = datetime.now()로 현재 시간을 가져옵니다. 문자열로 변환하려면 strftime()을 사용합니다.
- 예를 들어 now.strftime("% Y-%m-%d % H:%M:%S") 형태입니다. 그다음 append 모드로 파일을 엽니다. f.write(시간문자열 + " 기록내용\n")처럼 작성합니다.
- 이렇게 하면 실행 시각이 함께 저장됩니다. 로그 파일 작성 시 매우 자주 사용하는 방식입니다. 시간 정보는 추적과 분석에 중요합니다. 실무에서는 대부분 시간 정보를 함께 기록합니다.
- 파일 읽기 중 오류가 발생하면 어떻게 처리하나요?
- 파일 읽기 중 오류를 처리하려면 try-except 구문을 사용합니다. 먼저 try 블록 안에 파일 열기와 읽기 코드를 작성합니다.
- except 블록에서 예외를 처리합니다. 예를 들어 except FileNotFoundError:처럼 구체적으로 작성할 수 있습니다. 또는 Exception을 사용해 모든 오류를 처리할 수 있습니다.
- 오류 발생 시 안내 메시지를 출력할 수 있습니다. 프로그램이 갑자기 종료되지 않도록 하는 것이 중요합니다.
- 실무에서는 예외 처리를 필수로 작성합니다. 사용자 입력 파일은 항상 오류 가능성이 있습니다. 안정적인 코드 작성을 위해 예외 처리는 기본입니다.
- 파일을 덮어쓰기 전에 백업하는 방법은 무엇인가요?
- 덮어쓰기 전에 기존 파일을 복사해 두는 방법이 있습니다. 먼저 원본 파일을 읽습니다. 그 다음 다른 이름으로 저장합니다.
- 예를 들어 "data_backup.txt"처럼 새 파일을 만듭니다. 그 후에 원래 파일을 "w" 모드로 열어 작업합니다. 이렇게 하면 데이터 손실을 방지할 수 있습니다.
- shutil 모듈의 copy() 함수도 사용할 수 있습니다. 실무에서는 중요한 파일을 수정하기 전에 백업을 권장합니다.
- 특히 자동화 프로그램에서는 더욱 중요합니다. 덮어쓰기는 되돌릴 수 없기 때문입니다. 안전장치를 마련하는 것이 좋습니다.
- 파일을 읽은 후 데이터 타입을 변환하는 방법은 무엇인가요?
- 파일에서 읽은 데이터는 기본적으로 문자열입니다. 숫자로 사용하려면 int() 또는 float()로 변환해야 합니다. 예를 들어 number = int(line.strip())처럼 작성합니다. 줄 바꿈 제거 후 변환하는 것이 안전합니다.
- 만약 변환할 수 없는 문자열이면 ValueError가 발생합니다. 이 경우 try-except로 처리할 수 있습니다.
- 데이터 전처리 단계에서 타입 변환은 매우 중요합니다. 예를 들어 점수 데이터를 평균 계산하려면 숫자형이어야 합니다. 문자열 상태에서는 수치 계산이 불가능합니다. 파일 IO 이후에는 데이터 타입 점검이 필요합니다.
- 파일을 생성만 하고 쓰지 않으려면 어떻게 하나요?
- 파일을 생성만 하려면 "w" 또는 "x" 모드를 사용할 수 있습니다. "w"는 기존 파일이 있으면 삭제합니다.
- "x"는 파일이 없을 때만 생성합니다. 예를 들어 with open("new.txt", "x") as f: 형태로 작성합니다. 파일이 이미 존재하면 오류가 발생합니다.
- 이를 통해 실수로 덮어쓰는 것을 방지할 수 있습니다. 생성만 하고 아무것도 쓰지 않아도 빈 파일이 만들어집니다. 실무에서는 초기 설정 파일을 만들 때 활용할 수 있습니다.
- 파일 존재 조건을 엄격히 관리할 수 있습니다. 목적에 따라 모드를 선택해야 합니다.
- 파일 내용을 모두 대문자로 변환해 저장하려면 어떻게 하나요?
- 먼저 원본 파일을 읽기 모드로 엽니다. read() 또는 반복문으로 내용을 읽습니다.
- 그다음 문자열의 upper() 메서드를 사용합니다. 예를 들어 new_text = data.upper()처럼 작성합니다. 이후 새 파일을 "w" 모드로 열어 변환된 내용을 write()합니다.
- 이 과정은 읽기 → 변환 → 쓰기 순서입니다. 문자열 메서드는 매우 다양합니다. lower(), replace() 등도 활용할 수 있습니다. 파일 IO는 문자열 처리와 함께 사용됩니다. 데이터 가공 후 저장하는 것이 일반적인 흐름입니다.
- 파일 IO를 연습할 때 가장 중요한 학습 포인트는 무엇인가요?
- 파일 IO에서 가장 중요한 것은 흐름을 이해하는 것입니다. 파일 열기 → 작업 → 닫기 순서를 반드시 기억해야 합니다.
- 모드 선택이 데이터 안전과 직결된다는 점도 중요합니다. encoding 지정은 한글 환경에서 필수입니다.
- 읽기 방식은 파일 크기에 따라 달라집니다. write는 문자열만 받는다는 점을 기억해야 합니다.
- 예외 처리는 안정성을 높입니다. 파일 경로 개념도 정확히 이해해야 합니다. 반복 연습을 통해 흐름이 익숙해져야 합니다. 파일 IO는 파이썬 실무의 핵심 기초입니다.
파이썬 파일 입출력은 단순한 기능처럼 보이지만, 실제로는 모든 프로그램의 기반이 되는 핵심 기술입니다.
오늘 정리한 핵심은 다음과 같습니다.
- open 함수 구조 이해
모드 선택의 중요성
with 문 사용 권장
read / write / append 차이 이해
반드시 파일 닫기
이 개념만 정확히 이해하면 데이터 저장과 자동화 작업을 자유롭게 할 수 있습니다.
다음 단계에서는 CSV 파일 처리나 JSON 파일 처리로 확장해 보는 것을 추천드립니다.
[Python] 파이썬 리스트 기본 문법 정리
파이썬 리스트의 기본 개념부터 추가, 삭제, 인덱스, 반복문 활용 파이썬 리스트의 기본 개념부터 추가, 삭제, 인덱스, 반복문 활용까지 단계별로 쉽게 정리했습니다. 파이썬을 배우기 시작하면
raphaelstory777.tistory.com
[Python] 파이썬 튜플과 리스트 차이점 정리
파이썬 튜플과 리스트의 구조, 문법, 수정 가능 여부, 메모리 차이, 실무 활용 예제를 단계별로 정리합니다.
ochosblogg.blogspot.com
[Python] 파이썬 문자열(String) 기초 완전 정리 – 실무에서 바로 쓰는 문자열 처리 방법
파이썬 문자열(String)의 개념부터 자주 발생하는 오류, 문자열 처리 방법까지 단계별로 정리합니다. 파이...
blog.naver.com
'Python' 카테고리의 다른 글
| [Python] 파이썬 Set 교집합·합집합·차집합 실전 활용법 (0) | 2026.02.25 |
|---|---|
| [Python] 파이썬 리스트 기본 문법 정리 (0) | 2026.02.24 |
| [Python] 파이썬 변수와 자료형 완벽 정리 (0) | 2026.02.09 |
| [Python] 파이썬 print 함수 기초 설명 (0) | 2025.11.19 |
| [Python] 파이썬 처음 시작할 때 꼭 알아야 할 IDLE 사용법! (0) | 2025.05.18 |