[Zerobase][Python Mid] txt파일

솔비·2023년 12월 4일
0

💻 Python. w/zerobase

목록 보기
14/33
post-thumbnail

파이썬중급 [txt파일]

텍스트파일을 파이썬으로 다뤄보자

텍스트파일 관련 함수

open()  : 파일열기
read() : 읽기
write() : 쓰기
close() : 파일닫기

1. open()

open('어느위치에', '모드명')

file = open('C:/pythonTXT/test.txt','모드명')
#'C드라이브 pythonTXT폴더의 test 텍스트파일 

❗ 폴더주소를 복사한 후 역슬래스를 슬래스로 바꿀것
e.g.

C:\pythonTXT.파일명.txt -> C:/pythonTXT파일명.txt

📋 open의 모드명

w : 쓰기 전용(파일에 내용이 있으면 덮어씌움 / 없으면 생성)
a : 쓰기 전용(파일에 내용이 있으면 덧붙임/ 없으면 생성)
x : 쓰기 전용(기존에 파일이 없으면 error)
r : 읽기 전용(기존에 파일이 없으면 error)

A. w모드

쓰기 전용
(파일에 내용이 있으면 덮어씌움 / 없으면 생성)

  • 기존파일이 없을 경우 : 생성
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 내용 삭제

B. a모드

쓰기 전용
(파일에 내용이 있으면 덧붙임/없으면 생성)

  • 기존파일이 있을경우 : 덧붙임
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('새로생성도 가능합니다.')

C. x모드

쓰기 전용
(기존 파일이 없어야한다. 즉, 생성 후 쓰기)

D. r모드

read함수로 파일을 읽을 때 r모드로 open을 실행시킨다.


2. write()

텍스트파일에 내용 쓰기

  • 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 : 요일

3.read()

텍스트파일 내용 읽기
(파일없으면 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

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파일에서 내용이 수정되지는 않는다.
왜냐면 읽기모드이니까 !

4. close()

모든 open 마지막에는 close()를 입력해주어야한다.

🌟 with ~ as ~

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

5. writelines()

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

6. readlines() & reanlines()

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)

readlines

with open(url + 'readlines.txt','r') as r :
    print(r.readlines())
#출력값
['python\n', '주말에도\n', '공부합니다.\n']	 	#리스트형태로 묶어서 출력

readline

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}

🌟.split()

()속 문자를 기준으로 str을 나눠주는 매서드

🌟.strip()

()속 문자를 str에서 지워주는 매서드


Zero Base 데이터분석 스쿨
Daily Study Note
profile
Study Log

0개의 댓글