[강의 요약]
[Ch 03. 파이썬 중급] 강의 수강
34_텍스트 파일 쓰기부터 39_readlines(), readline()까지 강의 수강하였음
🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰ ] 20/100일 (20%)
머리 좋은 사람이 너무 부럽다....
강의에서 품고 있는 내용의 총량이 100이라면
내가 한번 수강하고 얻는 내용이 40
복습했을 때 50
또 복습하면 60 정도 머리에 남는다.
스스로의 지능에 좀 현타가 옴
[텍스트 파일 쓰기]
- 텍스트 파일을 다루기 위해 사용하는 기본 함수
- open(), write(), read(), close()
- 텍스트 파일 쓰기 흐름
- 파일 열기 → 쓰기/읽기 → 파일 닫기
▶ write() 함수로 파일에 문자열 쓰기
# 주석 설명 참고하면 된다.
file = open('C:/pythonTxt/test.txt', 'w') # 파일 쓰기 모드로 열기
strCnt = file.write('Hello world~') # 문자열 작성
print(f'strCnt: {strCnt}') # 쓴 글자 수 출력
file.close() # 파일 닫기
주의할 부분!
"w" 모드를 쓰면 기존 내용이 삭제되고 새로 작성된다.
▶ 실습 코드 : 일정 파일
file = open('파일경로', '모드')
# 모드 예시: 'w' = 쓰기, 'r' = 읽기
시스템 시간 + 오늘의 일정을 한 줄로 출력한다.
[2024년 4월 7일] 제로베이스 데이터 파트타임 글 작성
더 나아가서 시간 단위까지 한다면?
import time
lt = time.localtime()
dateStr = '[' + time.strftime('%Y-%m-%d %I:%M:%S %p', lt) + '] '
todaySchedule = input('오늘 일정: ')
file = open('C:/pythonTxt/test.txt', 'w')
file.write(dateStr + todaySchedule)
file.close()
[2024-04-07 03:21:45 PM] 블로그 정리하기
[텍스트 파일 읽기]
- read() 함수
- 파일을 열고 문자열을 한 번 읽어올 때 사용
- open() 함수
- 'r' 모드를 지정하면 읽기 모드로 파일을 연다
- 읽은 문자열은 변수에 저장하여 출력하거나 가공할 수 있음
▶ 예제 코드 : tes.txt 파일 읽기
file = open('C:/pythonTxt/test.txt', 'r')
str = file.read()
print(f'str: {str}')
file.close()
'test.txt' 파일을 읽기 전용으로 열고, read() 함수로 전체 내용을 문자열로 가져옴
마지막엔 close()로 파일을 닫는다.
▶ 실습 코드 : 특정 단어 변경하여 다시 저장
# 파일 열기
file = open('C:/pythonTxt/about_python.txt', 'r')
# 전체 내용 읽기
str = file.read()
print(f'str: {str}')
file.close()
# 특정 단어(Python)를 파이썬으로 변경 (최대 2번만)
str = str.replace('Python', '파이썬', 2)
print(f'str: {str}')
# 변경된 내용 파일에 다시 쓰기
file = open('C:/pythonTxt/about_python.txt', 'w')
strCnt = file.write(str)
file.close()
먼저 'about_python.txt' 파일에서 텍스트를 읽어오고
replace() 함수를 이용해 'Python'이라는 단어를 '파이썬'으로 최대 두 번만 바꿈
이후 바뀐 문자열을 다시 같은 파일에 덮어쓴다('w' 모드 사용해서)
[텍스트 파일 열기]
- 파일 모드란?
파이썬에서 파일을 열 때는 open() 함수의 두 번째 인자인 "모드"를 통해 어떤 목적으로 파일을 다룰지 지정함
▶ 예제 코드 : 'w' 모드
파일이 있으면 덮어씀
uri = 'C:/pythonTxt/'
file = open(uri + 'hello.txt', 'w')
strCnt = file.write('Hello world!!')
print(f'strCnt: {strCnt}')
file.close()
file = open(uri + 'hello.txt', 'w')
strCnt = file.write('Hello Python!!') # 기존 내용을 덮어씀
print(f'strCnt: {strCnt}')
file.close()
▶ 예제 코드 : 'a' 모드
기존 내용 뒤에 추가
file = open(uri + 'hello.txt', 'a')
file.write('\n')
file.write('Hello data science!!') # 파일 끝에 추가
file.close()
▶ 예제 코드 : 'x' 모드
파일이 이미 존재하면 에러
file = open(uri + 'hello.txt', 'x') # 파일이 이미 있으면 예외 발생
file.write('Nice to meet you!!')
file.close()
이미 있는 파일을 x 모드로 열면 FileExistsError가 발생
▶ 예제 코드 : 'x' 모드
file = open(uri + 'hello.txt', 'r')
str = file.read()
print(f'str: {str}')
file.close()
▶ 실습 코드 : 사용자 입력으로 소수만 추출해서 파일에 저장
uri = 'C:/pythonTxt/'
def writePrimeNumber(n):
file = open(uri + 'prime_numbers.txt', 'a')
file.write(str(n))
file.write('\n')
file.close()
inputNumber = int(input("0보다 큰 정수 입력: "))
for number in range(2, inputNumber + 1):
flag = True
for n in range(2, number):
if number % n == 0:
flag = False
break
if flag:
writePrimeNumber(number)
실행하면 prime_numbers.txt 파일에 2부터 사용자가 입력한 수까지의 소수가 한 줄씩 기록됨
[with ~ as 문]
- with ~ as 문은 파일 작업 후 자동으로 close()를 호출해 주는 구조임
- 파일을 열고 닫는 과정이 간단해지고, 실수로 파일을 닫지 않는 문제도 방지할 수 있음
▶ 예제 코드 : with문으로 바꾸기
uri = 'C:/pythonTxt/'
file = open(uri + '5_037.txt', 'a')
file.write('python study!!')
file.close()
file = open(uri + '5_037.txt', 'r')
print(file.read())
file.close()
위 코드를 with문으로 바꾸면 아래 코드가 된다.
with open(uri + '5_037.txt', 'a') as f:
f.write('python study!!')
with open(uri + '5_037.txt', 'r') as f:
print(f.read())
많이 사용했었는데 이렇게 하면 파일을 열고 닫는 과정이 생략되고 코드가 더 깔끔해진다.
▶ 실습 코드 : 로또 번호 생성기 프로그램
무작위 로또 번호를 생성해서 파일에 저장함
import random
uri = 'C:/pythonTxt/'
def writeNumbers(nums):
for idx, num in enumerate(nums):
with open(uri + 'lotto.txt', 'a') as f:
if idx < (len(nums) - 2):
f.write(str(num) + ', ')
elif idx == (len(nums) - 2):
f.write(str(num))
elif idx == (len(nums) - 1):
f.write('\n')
f.write('bonus: ' + str(num))
f.write('\n')
rNums = random.sample(range(1, 46), 7)
print(f'rNums: {rNums}')
writeNumbers(rNums)
결과는 다음과 같다.
39, 14, 19, 17, 27, 42
bonus: 45
내가 이런 걸로 몇 주 구매해 봤는데 운이 나쁜 건지 5천 원 당첨도 안되던 경험이 있다...
[writelines()]
- writelines()는 리스트(List) 또는 튜플(Tuple) 형태의 여러 줄 데이터를 한 번에 파일에 쓰기 위한 함수
- 각각의 요소에 줄 바꿈을 추가하고 싶다면, 요소마다 \n을 붙여주어야 함
▶ 예제 코드
languages = ['c/c++', 'java', 'c#', 'python', 'javascript']
uri = 'C:/pythonTxt/'
for item in languages:
with open(uri + 'languages.txt', 'a') as f:
f.write(item)
f.write('\n')
리스트를 하나씩 꺼내서 파일에 쓰고 줄 바꿈 추가
languages = ('c/c++', 'java', 'c#', 'python', 'javascript')
uri = 'C:/pythonTxt/'
with open(uri + 'languages.txt', 'a') as f:
f.writelines(item + '\n' for item in languages)
writelines()로 여러 줄을 한 번에 작성
▶ 실습 코드 : 과목별 점수 파일 저장
scoreDic = {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
uri = 'C:/pythonTxt/'
for key in scoreDic.keys():
with open(uri + 'scoreDic.txt', 'a') as f:
f.write(key + '\t: ' + str(scoreDic[key]) + '\n')
딕셔너리 전체 객체를 파일에 출력함
dic = {'s1': 90, 's2': 85, 's3': 95}
uri = 'C:/pythonTxt/'
with open(uri + 'scores.txt', 'a') as f:
print(dic, file=f)
[readlines(), readline()]
- readlines()
- 파일의 모든 데이터를 한 번에 읽어서 리스트 형태로 반환
- readline()
- 한 줄씩 읽어서 문자열로 반환
- 반복문과 함께 사용하면 파일을 한 줄씩 순차적으로 읽을 수 있음
▶ 예제 코드 : readlines()
uri = 'C:/pythonTxt/'
with open(uri + 'lans.txt', 'r') as f:
lanList = f.readlines()
print(f'lanList: {lanList}')
print(f'lanList type: {type(lanList)}')
결과는 리스트 형태로 출력됨
lanList: ['hello python\n', 'hello c/c++\n', 'hello java\n', 'hello javascript\n']
lanList type: <class 'list'>
▶ 예제 코드 : readline()
uri = 'C:/pythonTxt/'
with open(uri + 'lans.txt', 'r') as f:
line = f.readline()
while line != '':
print(f'line: {line}', end='')
line = f.readline()
결과는 줄 단위로 출력됨
line: hello python
line: hello c/c++
line: hello java
line: hello javascript
▶ 실습 코드 : 파일 데이터를 딕셔너리에 저장
scoreDic = {}
uri = 'C:/pythonTxt/'
with open(uri + 'scores.txt', 'r') as f:
line = f.readline()
while line != '':
tempList = line.split(':')
scoreDic[tempList[0]] = int(tempList[1].strip('\n'))
line = f.readline()
print(f'scoreDic: {scoreDic}')
결과는 다음과 같다.
scoreDic: {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
[나의 생각 정리]
- readlines()는 전체 데이터를 리스트로 읽어오기에 반복 처리에 유용함
- readline()은 한 줄씩 읽을 때 적합하며, 조건문과 반복문으로 세밀하게 제어 가능함
- 파일의 데이터를 프로그램 내 자료구조(딕셔너리 등)로 가공하면 재사용성과 가독성이 좋아짐
- 텍스트 파일에서 값을 읽고 처리하는 코드를 작성할 때는 strip(), split()을 적절히 활용해야 함
- 반복문 안에서 readline()을 사용할 경우 EOF 조건을 명확히 확인해야 오류를 방지할 수 있음
[적용점]
- 파일 전체 내용을 리스트로 가져와 한 번에 다루고 싶을 때?
- readlines() 사용하여 반복 처리
- 텍스트 파일을 한 줄씩 읽으며 특정 조건에 따라 분기 처리하고 싶을 때?
- readline() + while문으로 한 줄씩 제어
- 파일 데이터를 딕셔너리 등 자료구조로 변환하고 싶을 때?
- split(':') 등 문자열 함수로 가공 후 자료구조에 저장
- 문자열 끝 개행 문자까지 깔끔하게 다듬고 싶을 때?
- .strip('\n') 사용해 후처리
- 과목별 점수 등 데이터를 파일로 저장 후 불러오는 프로그램이 필요할 때?
- readline()을 통해 각 줄을 처리하여 딕셔너리로 만듦
“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”
'제로베이스 데이터 취업 파트타임 > 100일 챌린지_일일 학습 일지' 카테고리의 다른 글
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.07] (0) | 2025.04.07 |
---|---|
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.06] (0) | 2025.04.06 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.04] (0) | 2025.04.04 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.03] (0) | 2025.04.03 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.02] (1) | 2025.04.02 |