1) 학습 요약표
학습 내용 | 설명 |
파일 입출력의 개념 | 프로그램이 외부 데이터와 주고받기 위해 파일을 읽거나 쓰는 작업 |
파일 읽기: read(), readline(), readlines() | 전체/한 줄/리스트 형태로 파일 내용 읽기 |
파일 쓰기: write() | 문자열만 작성 가능. 반복문 활용 가능 |
파일 모드: 'r', 'w', 'a' | 읽기, 새로쓰기, 이어쓰기 용도로 모드 지정 |
with open() 사용 | 파일 자동 닫힘, 예외에도 안전함 |
flush() | 파일 버퍼를 강제로 저장장치에 기록 |
파일 존재 여부 확인 | os.path.exists()로 파일 유무 확인 가능 |
예외 처리 | try-except로 파일 오류 방지 |
사용자 입력 → 리스트 저장 | input(), list.append() 반복 활용 |
map() 함수 활용 | 리스트 등 반복가능 객체에 동일 함수 일괄 적용 |
2) 이론 학습
1. 파일입출력의 개념 및 필요성
파일 입출력은 프로그램이 외부와 데이터를 주고받는 기본 수단입니다.
- 파일을 통해 데이터를 저장하거나 불러와 재사용할 수 있음
- 네트워크 장비 로그 저장, 설정 파일 읽기, 결과 출력 등에 활용
nums = input("세 개의 숫자를 띄어쓰기로 입력하세요: ").split()
nums = list(map(int, nums))
result = 0
operator = input("""
1. 덧셈
2. 뺄셈
3. 곱셈
4. 나눗셈
선택: """)
if operator == "1":
result = nums[0] + nums[1] + nums[2]
elif operator == "2":
result = nums[0] - nums[1] - nums[2]
elif operator == "3":
result = nums[0] * nums[1] * nums[2]
elif operator == "4":
result = nums[0] / nums[1] / nums[2]
else:
print("잘못된 입력입니다.")
with open("result.txt", 'w') as f:
f.write(f"연산 결과: {result}\n")
2. map() 함수 활용
map(함수, 반복가능한 객체)의 형태로 각 요소에 동일한 작업을 수행할 수 있습니다.
- 문자열 처리, 숫자 계산 등 일괄 처리에 효과적
def func(a):
return a * 2
nums = [1, 2, 3, 4]
res = list(map(func, nums))
print(res)
3. 파일 열기/생성 및 열기 모드 설명
open("파일명", 모드)로 파일을 엽니다.
- 'r': 읽기 전용, 파일이 없으면 오류
- 'w': 쓰기 전용, 기존 파일이 있으면 덮어씀
- 'a': 추가 모드, 기존 내용 유지하고 덧붙임
f = open("test_log.txt", 'w')
f.write("로그 시작\n")
f.close()
4. write(): 문자열만 가능
write()는 문자열만 저장할 수 있으므로, 숫자 등은 str()로 변환 필요합니다.
score = 85
f = open("score.txt", 'w')
f.write(str(score))
f.close()
5. 반복문을 활용한 파일 쓰기
반복문을 통해 여러 줄을 파일에 저장할 수 있습니다.
f = open("status.txt", 'w')
for i in range(1, 6):
f.write(f"Switch{i} 상태: 정상\n")
f.close()
6. 파일 읽기 함수들: read(), readline(), readlines()
- read(): 파일 전체를 하나의 문자열로 읽음
- readline(): 한 줄씩 읽고 문자열 반환
- readlines(): 모든 줄을 리스트로 반환
with open("status.txt", 'r') as f:
print("전체 내용:", f.read())
with open("status.txt", 'r') as f:
print("첫 줄:", f.readline())
with open("status.txt", 'r') as f:
print("리스트로 전체:", f.readlines())
7. 파일을 while문으로 읽기
파일 줄 수를 모를 때 while문과 readline() 조합 활용
f = open("status.txt", 'r')
while True:
line = f.readline()
if not line:
break
print("읽은 줄:", line.strip())
f.close()
8. 사용자 입력을 리스트에 저장하기
엔터만 입력하면 입력 종료. 리스트에 저장됨
ip_list = []
while True:
ip = input("장비 IP 입력 (종료: 엔터): ")
if not ip:
break
ip_list.append(ip)
print("입력된 IP 목록:", ip_list)
9. 쓰기(w) vs 추가(a) 모드 차이
쓰기 'w'는 기존 내용 덮어쓰기, 추가 'a'는 기존 뒤에 이어 작성
- 'w' 모드는 파일을 열 때 한 번만 기존 내용을 전부 지우고 새로 시작.
- 그다음 f.write()를 여러 번 호출하면, 덮어쓰기(X), 이어쓰기(O) 방식으로 계속 파일에 내용이 들어간다.
with open("log.txt", 'w') as f:
f.write("로그 시작\n")
with open("log.txt", 'a') as f:
f.write("로그 이어쓰기\n")
with open("log.txt", 'r') as f:
print(f.read())
10. with open() 사용 이유
파일을 열고 자동으로 닫아주는 안전한 방법
with open("safe_log.txt", 'w') as f:
f.write("with 구문 예시\n")
11. flush() 함수 사용
버퍼 내용을 강제로 저장소에 기록. 실시간 로그 등에 사용
f = open("temp_write.txt", 'w')
f.write("첫 줄 기록 중...\n")
f.flush()
input("계속하려면 엔터: ")
f.write("두 번째 줄 저장 완료\n")
f.close()
12. 파일 존재 여부 확인 (os.path.exists)
파일 존재 여부를 확인하고 처리 흐름 제어
import os
if os.path.exists("config.yaml"):
print("[존재함] 설정 파일 발견")
else:
print("[없음] 새로 생성 예정")
13. 예외 처리로 안전한 파일 열기
파일이 없거나 권한이 없을 경우 오류를 예방함
try:
with open("unknown.txt", 'r') as f:
print(f.read())
except FileNotFoundError:
print("[오류] 파일이 존재하지 않습니다.")
except PermissionError:
print("[오류] 파일 권한 부족")
3) 종합 실습 과제
실습 1: 사용자 입력을 받아 계산 결과 파일에 저장하기
문제 설명: 사용자로부터 두 개의 정수를 입력받고, 사칙연산 기호(+,-,*,/) 중 하나를 입력받아 계산 결과를 파일 calc_log.txt에 저장하세요.

실습 2: 단어 목록을 대문자로 바꿔 파일에 저장하기
문제 설명: 사용자로부터 단어를 여러 개 입력받고, 대문자로 변환하여 words_upper.txt 파일에 줄마다 저장하세요.

실습 3: 주간 일정 계획 입력 및 파일 저장
문제 설명: 사용자로부터 월~금요일까지의 각 요일 일정 하나씩 입력받아 weekly_plan.txt 파일에 저장하고, 다시 그 파일을 읽어 출력하세요.

실습 4: 기존 파일에 로그 이어쓰기
문제 설명: log_history.txt 파일에 사용자 로그 내용을 입력받아 추가 모드로 계속 저장하세요. 종료 입력 시 종료됩니다.

실습 5: 저장된 단어 수 세기
문제 설명: 파일 words_upper.txt에서 저장된 단어의 개수를 출력하세요.
'파이썬 > 기초 학습' 카테고리의 다른 글
Day 10: 예외 처리 추가 학습 (5) | 2025.08.05 |
---|---|
Day 9: 모듈 & 외부 라이브러리 (2) | 2025.08.05 |
Day 7: 함수 추가학습 (2) | 2025.08.02 |
Day 6: 조건문 & 반복문 추가학습 (2) | 2025.08.01 |
Day 5: 반복문(while,for) 추가 학습 (3) | 2025.07.30 |