텍스트 파일 관련 기본함수
open(), read(), write(), close()
텍스트 파일 |
|
① |
|
② |
|
③ |
── |
open( ) |
── |
read() or write( ) |
─→ |
close( ) |
|
파일 열기 |
|
읽기 또는 쓰기 |
|
파일 닫기 |
파일 쓰기: write( )
write( ) 함수를 이용한 파일에 문자열 쓰기
【 파일 객체를 담은 변수명.write(데이터) 】
열린 파일에 데이터가 쓰여진다.
반환값이 있으며, 이는 쓰여진 문자열의 갯수이다.
file = open('경로/~/파일명.txt', 'w') #w - 쓰기모드, r - 읽기모드
#w - 쓰기모드 : 파일명이 있으면 열고, 열으면 새로 생성해서 연다.
# 기존의 내용은 없애고 새로운 내용으로 덮어쓴다.
#r - 읽기모드 : 파일명이 없으면 오류가 난다.
strCnt = file.write('Hello world~!')
print(f'strCnt: {strCnt}')
file.close()
[실습]
다음과 같이 시스템 시간과 일정을 텍스트 파일에 작성해보자.
예시) [2023년 11월 1일] python study
import time
lt = time.localtime()
# dataStr = '[' + str(lt.tm_year) + '년' + \
# str(lt.tm_mon) + '월' +\
# str(lt.tm_mday) + '일]'
dataStr = '[' + time.strftime('&Y-%m-%d %H:%M:%S %p') + ']'
# &Y: 년, %m: 월, %d:일, %H:시(24시간제 표시), %I:시, %M:분, %S:초, %p:Am/Pm
todaySchedule = input('오늘 일정: ')
file = open('경로/~/파일명.txt', w)
file.write(dataStr + todaySchedule)
file.close()
-- 출력 -- |
오늘 일정: python study |
파일 읽기: read( )
read( ) 함수를 이용한 파일 문자열 읽기
【 파일 객체를 담은 변수명.read() 】
file = open('경로/~/파일명.txt', 'r') #w - 쓰기모드, r - 읽기모드
strContent = file.read()
print(f'str: {strContent}')
file.close()
[실습] 다음 텍스트 파일에서 'Python'을 '파이썬'으로 변경해서 파일에 다시 저장해보자.
about_python.txt Python은 1991년 프로그래머 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다. Python이라는 이름은 귀도가 좋아하는 코미디 <Monty Python's Flying Circus>에서 따온 것이다. |
file = open('about_python.txt', 'r', encoding='utf8')
str = file.read()
str = str.replace('python','파이썬', 2) #2개만 변경
file.close()
print(f'str: {str}')
file = open('about_python.txt', 'w', encoding='utf8')
file.write(str)
file.close()
파일 읽기: open( )
파일모드 인수로 목적에 맞게 파일을 열 수가 있다.
【 open('파일명', '파일모드', encoding='') 】
파일모드
- w : 쓰기 전용 (파일 덮어쓰기)
- a : 쓰기 전용 (파일 덧붙임)
- x : 쓰기 전용 (파일이 있으면 에러 발생)
- r : 읽기 전용 (파일이 없으면 에러 발생)
url = '경로/~/'
# w 모드 : 덮어쓰기
file = open(url+'파일명.txt', 'w')
file.write('Hello python!!')
file.close()
# a 모드 : 덧붙임
file = open(url+'파일명.txt', 'a')
file.write('\nNice to meet you!!')
file.close()
# x 모드 : 기존에 파일이 있으면 에러
file = open(url+'파일명_01.txt', 'x')
file.write('\nNice to meet you!!')
file.close()
# r 모드 : 파일 읽기
file = open(url+'파일명.txt', 'r')
str = file.read()
print(f'str: {str}')
file.close()
[실습] 사용자가 입력한 숫자에 대한 소수를 구하고 이를 파일에 작성해보자.
#소수: 1과 자신 이외의 어떤 수로도 나누어지지 않는 수
#약수: 나머지 없이 나눠지는 수
#합성수: 약수가 1과 자신이외에 더 있어서 3개이상인 수
url = '경로/~/'
def writePrimeNumber(n):
file = open(url+'파일명.txt', 'a')
file.write(str(n))
file.write('\n')
file.close()
inputNumber = int(input('0보다 큰 정수 입력: '))
for num in range(2, (inputNumber + 1)):
flage = True
for n in range(2, num):
if num % n == 0:
flage = False
break
if (flage):
writePrimeNumber(num)
파일 닫기: close( ), with ~ as
with ~ as 문을 이용하면 close를 생략할 수 있다.
【 파일 객체를 담은 변수명.close() 】
【 with open(파일명, 파일모드) as 별칭: 】
【 별칭.read() 】
【 별칭.write('텍스트') 】
url = '경로/~/'
file = open(url+'파일명.txt', 'a')
file.write('Hello python!!')
file.close()
# with ~ as문으로 하면~
with open(url+'파일명.txt', 'a') as f:
f.write('Hello python!!')
[실습]
로또 번호 생성기 프로그램을 만들고, 파일에 번호를 출력해보자.
import random
url = '경로/~/'
def writeNumbers(nums):
for idx, num in enumerate(nums):
with open(url + '파일명.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'fNums: {rNums}')
writeNumbers(rNums)