Search

텍스트 파일 다루기

open(), read(), write(), close() 를 이용해서 텍스트 파일을 다룰 수 있다.
1.
파일을 쓰거나, 읽고 싶을 때 → open()
open(’파일 디렉토리명’, ‘w’) : 파일을 연 뒤, 쓴다
기존에 이미 내용이 있을 경우, 새로 쓴 내용으로 완전히 덮어버린다
file = open('디렉토리명', 'w') strCnt = file.write('블라블라') # 반환값은 쓴 문자의 개수다 print(f'strCnt : {strCnt}') file.close() # 반드시 닫아줘야 됨.
Python
복사
# 시스템 시간과 일정을 텍스트 파일에 작성해보자. import time lt = time.localtime() dateStr = '[' + str(lt.tm_year) + '년 ' +\ str(lt.tm_mon) + '월 ' +\ str(lt.tm_mday) + '일]' toDo = input('오늘 일정: ') file = open("디렉토리", 'w') file.write(dateStr + toDo) file.close()
Python
복사
open(’파일 디렉토리명’, ‘r’) : 파일을 연 뒤, 읽는다
 read 의 경우에는 파일이 존재하지 않으면 error 발생
read() 는 어떤 형태로 쓰여져 있던, 문자로 읽어온다.
# .strftime() : date, datetime 의 시간형태를 원하는 문자열 포맷으로 변경표현해주기 dateStr = '[' + time.strftime('%Y-%M-%d %H:%M:%S %p') + ']' # %p는 AM/PM 을 나타낸다.
Python
복사
 %H , %I
H는 24시간 표시로, 오후 1시를 표현할때 13시로 표현하는 방식이다.
I는 12시간 표시로, 오후 1시를 표현할 때 1로 표현하는 방식이다.
# 파일에 있는 특정 문자를 다른 문자로 변경해보자. new = open('디렉토리명', 'w') new.write('~~') new.close() # 기존 파일을 일단 읽어온다음에 new = open('디렉토리명', 'r') forChange = new.read() forChange = forChange.replace('Python','파이썬') # 모든 'Python'을 '파이썬'으로 변경해준다. new.close()
Python
복사
만약 전체를 바꾸는 것이 아니라, 앞에서부터 특정 개수까지만 변경해주고 싶다면 다음과 같이 사용한다.
replace(’바꾸기 전 문자’, ‘바꾸고 난 문자’, 개수)

파일 열기 모드 종류

w, a, x, r : 총 4가지 정도가 있다
‘w’ : 쓰기 전용(파일이 있다면 덮어씌운다)
기존에있는 파일의 내용은 다 날라간다.
‘a’ : 쓰기 전용(파일이 있다면 덧붙여준다)
기존에 있는 파일의 내용에 덧붙여준다.
‘x’ : 쓰기 전용(파일이 있다면 error 발생)
‘r’ : 읽기 전용(파일이 없다면 error 발생)
# 사용자가 입력한 숫자까지의 값중에서 소수만 파일에 작성하는 코드 url = '저장할 디렉토리' def writePrimeNumber(n): file = open(url + 'prime_numbers.txt', 'a') file.write(str(n)) file.write('\n') file.close() inputNumber = int(input('0보다 큰 정수 입력: ')) for num in range(2, (inputNumber + 1)): # 2부터 입력한 정수까지의 숫자까지 돌면서 flag = True for i in range(2,num): # 2 ~ (자기자신 - 1)의 값 중 하나라도 나누어떨어지는 숫자가 있다면 if num % i == 0: flag = False break if flag == True: # 2 ~ (자기자신 - 1)의 값 중 나누어떨어지는 숫자가 하나도 없다면 writePrimeNumber(num)
Python
복사

with ~ as

uri = '디렉토리' with open(uri + '파일이름.txt', 'a') as f: f.write('python study!!') with open(uri + '파일이름.txt', 'r') as f: print(f.read())
Python
복사
# 로또 번호 생성기 프로그램을 만들고 파일에 번호를 출력 import random rNums = random.sample(range(1,46), 7) # 1 ~ 46까지의 번호중에 7개를 랜덤하게 추출 -> 리스트에 print(f'rNums : {rNums}') def writeNumbers(nums): for idx, num in enumerate(nums): with open(uri + '파일이름', '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') writeNumbers(rNums)
Python
복사

writelines()

# 위의 코드를 실행하면 개행이 되지 않는 것을 확인할 수있다. # writelines() 를 이용해서 개행을 하려면 다음과 같이 해주자. with open(uri + '파일이름.txt', 'a') as f: f.writelines(item + '\n' for item in laguages)
Python
복사
 즉, writelines() 안에 for 문을 넣어줘서 각 원소마다 개행문자를 붙여주면 해결된다.
# 딕셔너리에 저장된 과목별 점수를 파일에 저장하는 코드를 작성하자 scoreDic = {'kor':85, 'eng':90, 'mat':92, 'sci':79, 'his':82} uri = '파일 디렉토리' for key in scoreDic.keys(): # key 값들만 포함된 리스트 with open(uri + '파일이름.txt', 'a') as f: f.writelines(key + '\t: ' + str(scoreDic[key]) + '\n')
Python
복사
# 위의 딕셔너리 모양 그대로 출력하고 싶다면 print(써주고 싶은 변수명, file = 파일이름)을 사용한다. # 리스트도 마찬가지다. with open(uri + '파일이름2.txt', 'a') as f: print(scoreDic, file=f)
Python
복사

여러줄 읽기와 한줄 읽기

readlines() 와 readline()
readlines()
파일의 모든 데이터를 읽어서 리스트 형태로 반환
readline()
한 행만 읽어서 문자열로 반환한다.
while 이나 for문을 이용해서 한 행씩 읽어들일 수 있다.
# 파일에 저장된 과목별 점수를 파이썬에서 읽어, 딕셔너리에 저장하는 코드를 만들어보자. scoreDic = {} uri = '파일디렉토리' with open(uri + '파일 이름.txt', 'r') as f: line = f.readline() while line != '': # line 을 모두 읽어들일때까지 반복 tempList = line.split(':') # ':' 를 기준으로 분리해서 리스트에 저장 scoreDic[tempList[0]] = int(tempList[1].strip('\n')) # '\n'을 삭제해주고 정수형으로 value 값 저장 line = f.readline() print(f'scoreDic: {scoreDic}')
Python
복사
str.split(’특정 문자’) : 특정 문자를 기준으로 문자열을 나눠 리스트에 저장
str.strip(’특정 문자’) : 특정 문자를 문자열의 양방향에서 모두 삭제