텍스트파일을 파이썬으로 다뤄보자
open() : 파일열기
read() : 읽기
write() : 쓰기
close() : 파일닫기
open('어느위치에', '모드명')
file = open('C:/pythonTXT/test.txt','모드명') #'C드라이브 pythonTXT폴더의 test 텍스트파일
❗ 폴더주소를 복사한 후 역슬래스를 슬래스로 바꿀것
e.g.
C:\pythonTXT.파일명.txt -> C:/pythonTXT파일명.txt
w : 쓰기 전용(파일에 내용이 있으면 덮어씌움 / 없으면 생성)
a : 쓰기 전용(파일에 내용이 있으면 덧붙임/ 없으면 생성)
x : 쓰기 전용(기존에 파일이 없으면 error)
r : 읽기 전용(기존에 파일이 없으면 error)
쓰기 전용
(파일에 내용이 있으면 덮어씌움 / 없으면 생성)
file = open('C:/pythonTXT/test.txt','w') #파일열기(기존에 없던 파일-> 생성)
str_cnt = file.write('Hello World') #내용입력
print(f'str_cnt : {str_cnt}') #11
file.write('\nStudy')
file.close() #폴더닫기
# file = open('C:/pythonTXT/test.txt','w')
#
# file.write('Hello World')
# file.write('\nStudy')
w_mode = open('C:/pythonTXT/test.txt','w')
w_mode.write('기존내용 없어지고 덮어씌워집니다.')
기존 Hello World Study 내용 삭제
쓰기 전용
(파일에 내용이 있으면 덧붙임/없으면 생성)
w_mode = open('C:/pythonTXT/test.txt','w')
w_mode.write('기존내용 없어지고 덮어씌워집니다.')
a_mode = open('C:/pythonTXT/test.txt','a')
a_mode.write('\n기존내용에 덧붙여서 적습니다.\n기존내용이 삭제되지 않습니다.')
a_mode = open('C:/pythonTXT/test2.txt','a')
a_mode.write('새로생성도 가능합니다.')
쓰기 전용
(기존 파일이 없어야한다. 즉, 생성 후 쓰기)
read함수로 파일을 읽을 때 r모드로 open을 실행시킨다.
텍스트파일에 내용 쓰기
- open으로 파일을 열고 그걸 변수에 담아준다.
e.g.#file = open('C:/pythonTXT/test.txt','w')
- 변수명.write('출력값=문자로')
str_cnt = file.write('Hello python!')
#예시
import time
datestr = '[' + time.strftime('%Y-%m-%d %I:%M:%S %p') + ']'
file = open('C:/pythonTXT/time.txt','w')
today_date = file.write(datestr)
print(today_date)
file.close()
time.strftime('%Y-%m-%d %I:%M:%S %p') #오늘날짜 분리출력
이때, %값은
%y : 두 자리 수의 연도 ex) 19, 20, 21
%Y : 네 자리 수의 연도 ex) 2019, 2020, 2021
%m : 0을 채운 두 자리 수의 월 ex) 01, 02 ... 11 ,12
%d : 0을 채운 두 자리 수의 일 ex) 01, 02 ... 30, 31
%I : 0을 채운 12시간제의 시간 ex) 01, 02 … 12
%H : 0을 채운 24시간제의 시간 ex) 00, 01 … 23
%M : 0을 채운 두 자리 수의 분 ex) 00, 01 ... 58, 59
%S : 0을 채운 두 자리 수의 초 ex) 00, 01 ... 58, 59
%p : PM AM
%a : 요일
텍스트파일 내용 읽기
(파일없으면 error)
- open으로 파일을 열고 그걸 변수에 담아준다.
file = open('C:/pythonTXT/time.txt','r')
- 변수명.read()
today_time = file.read()
import time
tm = time.localtime()
datestr = ('[' + str(tm.tm_year) + '년'
+ str(tm.tm_mon) + '월'
+ str(tm.tm_mday) + '일' + ']')
time_file = open('C:/pythonTXT/time.txt','w')
time_file.write(datestr)
time_file.close() #닫아줘야 추가입력이 안됨
time_file = open('C:/pythonTXT/time.txt','r')
what_time_file = time_file.read()
print(what_time_file) #[2023년12월4일]
replace(기존내용을, 이 내용으로, N개 변경하겠다.)
w_mode = open('C:/pythonTXT/replace.txt','w')
w_mode.write('오늘은 python 중급의 txt파일에 대해 공부합니다.\n'
'python은 어렵지만, 해냈을 때 재밌고 뿌듯한 공부입니다.')
w_mode.close()
r_mode = open('C:/pythonTXT/replace.txt','r')
result = r_mode.read()
print(result)
#오늘은 python 중급의 txt파일에 대해 공부합니다.
#python은 어렵지만, 해냈을 때 재밌고 뿌듯한 공부입니다.
result = result.replace('python','파이썬')
print(result)
#오늘은 파이썬 중급의 txt파일에 대해 공부합니다.
#파이썬은 어렵지만, 해냈을 때 재밌고 뿌듯한 공부입니다.
📢 콘솔창에서 내용은 수정되었지만,
txt파일에서 내용이 수정되지는 않는다.
왜냐면 읽기모드이니까 !
모든 open 마지막에는 close()를 입력해주어야한다.
with ~ as를 이용하면 close를 생략할 수 있다
with open('주소','모드') as 별명
#close를 생략하자
url = 'C:/pythonTXT/'
with open(url+'with_as.txt','a') as f :
f.write('with~as를 사용하면 open파일을 변수에 담아줄 필요도\n'
'close로 닫아줄 필요도 없습니다.')
with open(url+'with_as.txt','r') as f :
result = f.read()
print(result)
# with~as를 사용하면 open파일을 변수에 담아줄 필요도
# close로 닫아줄 필요도 없습니다.
로또 번호 생성기 프로그램을 만들고 파일에 번호를 출력해보자
import random
url = 'C:/pythonTXT/'
def write_numbers(nums) :
for idx, num in enumerate(nums) :
with open(url + 'lotto.txt','a') as f :
if idx < (len(nums) -2 ): #숫자 뒤 ,넣어주기
f.write(str(num)+',')
elif idx == (len(nums)-2 ) : #6번째 숫자는 n 안넣기
f.write(str(num))
elif idx == (len(nums) -1) : #7번째 숫자는 보너스번호 (개행)
f.write('\n')
f.write('bonus : ' + str(num))
f.write('\n')
rnum = random.sample(range(1,47),7)
print(f'rnums : {rnum}') #콘솔창에 찍히는 rnum
write_numbers(rnum)
#6번 실행 후 lotto txt파일
4,6,16,43,30,5
bonus : 7
39,14,42,34,1,30
bonus : 33
46,44,18,20,3,36
bonus : 37
21,26,27,6,30,18
bonus : 32
28,27,29,10,24,25
bonus : 11
4,15,23,18,30,21
bonus : 43
list 또는 튜플 데이터를 파일에 쓰기 위한 함수
예를 들어
languages = ['python','c/c++','java','c#']
위 languages를 txt파일에 넣기위해서는
for문을 사용해서 하나씩 담아주어야 한다.
languages = ['python','c/c++','java','c#']
url = 'C:/pythonTXT/'
for item in languages :
with open(url + 'languages','a') as f
f.write(item)
f.write('\n')
하지만 writelines()를 사용하면, 한번에 넣어줄 수 있다.
url = 'C:/pythonTXT/'
languages = ('c/c++', 'python','c#','java')
#개행없이 넣을 시
with open(url + 'languages_writelines.txt','a') as f :
f.writelines(languages)
#출력값
c/c++pythonc#java
#개행 추가해서 넣을시
with open(url + 'languages_writelines_n.txt','a') as f :
f.writelines(item + '\n'
for item in languages)
#출력값
c/c++
python
c#
java
딕셔너리에 저장된 과목별 점수를 파일에 저장하는 코드를 작성하자
score_dic = {'kor' : 85, 'eng' : 90, 'mat' : 92, 'sci' : 79, 'his' : 82}
url = 'C:/pythonTXT/'
with open(url + 'scores.txt' , 'w') as f :
f.writelines( str(key) + ':' + str(value) + '\n'
for key,value in score_dic.items())
with open(url + 'scores.txt' , 'r') as f :
print(f.read())
#kor:85
#eng:90
#mat:92
#sci:79
#his:82
txt 파일 -> python
readlines() : 파일의 모든 데이터를 읽어서 리스트 형태로 반환
readline() : 한 행씩 읽어서 문자열로 반환한다.
url = 'C:/pythonTXT/'
list = ('python','주말에도','공부합니다.')
with open(url + 'readlines.txt','w') as r :
r.writelines(i + '\n' #개행추가해서 입력
for i in list)
with open(url + 'readlines.txt','r') as r :
print(r.readlines())
#출력값
['python\n', '주말에도\n', '공부합니다.\n'] #리스트형태로 묶어서 출력
with open(url + 'readlines.txt_notn', 'r') as r:
print(r.readline()) #python
print(r.readline()) #주말에도
print(r.readline()) #공부합니다.
with open(url + 'readlines.txt_notn', 'r') as r:
result = r.readline()
while result != '' :
print(result)
result = r.readline()
#python
#주말에도
#공부합니다.
출력값 사이사이 개행은
저장되어있는 txt파일 자체에 /n으로 개행처리가 되어있기 때문.
파일에 저장된 과목별 점수를 파이썬에서 읽어
딕셔너리에 저장하는 코드를 만들어보자
#--------파일쓰기--------
txt_dic = {'kor' : 85, 'eng' : 90, 'mat' : 92, 'sci' : 79, 'his' : 82}
url = 'C:/pythonTXT/'
with open(url + 'dic_score.txt','w') as f :
f.writelines( str(key) + ':' + str(value) + '\n'
for key, value in txt_dic.items())
#--------파일읽기--------
read_dix = {}
with open(url + 'dic_score.txt','r') as f :
line = f.readline()
while line != '' :
temp_list = line.split(':')
print(temp_list)
#['kor', '85\n']
#['eng', '90\n']
#['mat', '92\n']
#['sci', '79\n']
#['his', '82\n']
read_dix[temp_list[0]] = int(temp_list[1].strip('\n'))
line = f.readline()
print(read_dix)
#{'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
()속 문자를 기준으로 str을 나눠주는 매서드
()속 문자를 str에서 지워주는 매서드