새소식

데이터분석/둘째주

파이썬 Python : 텍스트 파일 다루기

  • -
728x90

 

open(), read(), write(), close() 

텍스트 파일     ②    ③ 
──     open( )     ── read()  or  write( ) ─→     close( )    
  파일 열기   읽기 또는 쓰기   파일 닫기

 

 

write( ) 함수를 이용한 파일에 문자열 쓰기

 

 【  파일 객체를 담은 변수명.write(데이터)  】     

열린 파일에 데이터가 쓰여진다.

반환값이 있으며, 이는 쓰여진 문자열의 갯수이다.

 

file = open('경로/~/파일명.txt', 'w') #w - 쓰기모드, r - 읽기모드 #w - 쓰기모드 : 파일명이 있으면 열고, 열으면 새로 생성해서 연다. # 기존의 내용은 없애고 새로운 내용으로 덮어쓴다. #r - 읽기모드 : 파일명이 없으면 오류가 난다. strCnt = file.write('Hello world~!') print(f'strCnt: {strCnt}') file.close()
-- 출력 --
strCnt: 13

 

[실습]

다음과 같이 시스템 시간과 일정을 텍스트 파일에 작성해보자.

예시) [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()  】     

 

 

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('파일명', '파일모드', 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)

 

 

 

 

 

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)

 

 

 

반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.