파이썬따라하기/4입출력

#입출력3편 - 파이썬 파일 읽기 쓰기 추가 기초 python

모두의 실험실 2023. 5. 6. 17:49
728x90

변수설정하고 출력하는 것을 주피터 노트북에서만 가능한가? 뭐다?

직접 C:또는 저장경로에 파일을 생성하고 읽을 수도 있음

 

직장인들은 엑셀 파워포인트 워드 등 주로 자료를 

만들어 업무를 진행함

학생들은 엑셀 파워포인트 워드로 과제를 수행하여

제출함

 

업무나 과제수행시 수치자료등 자동으로 작성된다면

업무나 과제를 진행하는데 편리함

 

그래서 파일을 읽어 들여 python으로 가공하고

다시 파일을 작성하여 업무나 과제를 진행함

 

path = 'D:\\tmp\\test.txt'
mode = 'w'

f = open(path,mode)
print(type(f))
print(f)
f.close()

-결과 (드래그로 확인가능)

<class '_io.TextIOWrapper'>
<_io.TextIOWrapper name='D:\\tmp\\test.txt' mode='w' encoding='cp949'>

 

파일을 쓰기위해서는 파일을 정의해야함

그 형태가 open함수를 사용하고

경로와 'w'를 입력해야함

'w'는 write의 줄여서 사용

참고로 write는 '쓰다'라는 사전적의미임

f는 _io.TextIOWrapper의 type을 지니며

f의 기본적 encoding은 'cp949'로 됨

파일을 쓰고난 후에는 반드시 close()를 사용하여

종료하여야 파일이 정상적으로 저장됨

 

-결과 (이미지)

내용이 아무것도 없는 파일이 만들어짐

저장할 경로에는 반드시 폴더가 만들어져 있어야함

 

 

파일 작성시 write()를 사용하며

괄호 안에 원하는 문자열 자료형 또는 숫자형 자료형을

입력해야함

path = 'D:\\tmp\\test.txt'
mode = 'w'

f = open(path,mode)
f.write('modoo python')
f.write('hello python')
f.close()

path2 = 'D:\\tmp\\test2.txt'

f2 = open(path2,mode)
f2.write('modoo python\n')
f2.write('hello python\n')
f2.close()

-결과 (이미지)

test.txt와 test2.txt의 큰차이점은 줄바꿈 유무임

f2.write에 문자열 입력후 '\n'을 입력하면

줄바꿈이 수행됨

 

기존에 있는 파일에 내용을 더하여 작성할 수도 있음

그럴때는 'w' 대신 'a'를 사용함

'a'는 append의 약자임

참고로 append는 '추가'라는 사전적 의미임

'w'는 기존의 파일을 지우고 새롭게 생성하므로 주의해야 함

path = 'D:\\tmp\\test.txt'
mode = 'w'

f = open(path,mode)
f.write('modoo python\n')
f.write('hello python\n')
f.close()

mode2 = 'a'

f = open(path,mode2)
f.write('\n\n')
f.write('goodbye python\n')
f.close()

-결과 (이미지)

 

리스트 자료형과 for문을 사용하여 여러파일을 만들어 낼수 있음

common_str = '님 올 한해 함께 프로젝트 할 수 있어서 많이 배울수 있었던 시간이었습니다.\n내년에도 잘 부탁드립니다'
l_name = ['김철수','이영희','박맹구','황영구']

for i in l_name:
    path = 'D:\\tmp\\'+ i +'.txt'
    mode = 'w'
    
    f = open(path,mode)
    f.write(i + common_str + '\n')
    f.close()

-결과 (이미지)

 

코드 내에 연산할 때 파일을 내의 정보를 사용할때

파일읽기를 사용해야함

파일 읽기를 할때는 'r' 모드를 사용해야함

'r'은 read의 약자이며 '읽다'라는 사전적 의미임

path = 'D:\\tmp\\score.txt'
mode = 'r'
e_type = ''

result = []
f = open(path,mode,encoding = 'utf8')
for i in f.readlines():
    print([i])
    tmp = i.replace('\n','').split(' ')
    result.append(tmp)
    
f.close()
print('----------')
print(result)

-결과 (드래그로 확인가능)

['영희 100\n']
['철수 95\n']
['맹구 20\n']
['영구 5']
----------
[['영희', '100'], ['철수', '95'], ['맹구', '20'], ['영구', '5']]

 

파일은 이름과 점수와 마지막에 줄바꿈이 포함된 문자열로 구성됨

읽거나 쓸때 encoding type이 필요하며

기본적으로 encoding type은 'cp949' 임

한글이 없을때는 괜찮으나 한글이 포함되면

'utf8'로 수정하여 수행 필요

 

result에 리스트 자료형으로 이름과 점수를 각각 저장할 수 있음

 

-파일(이미지)

동일하게 while문으로 구현가능함

while문은 저장된 파일의 줄이 끝나기 전까지 

수행되게 구현할 수 있음

path = 'D:\\tmp\\score.txt'
mode = 'r'
e_type = 'utf8'

result = []
f = open(path,mode,encoding = e_type)
while True:
    i = f.readline()
    if not i: 
        break
    else:
        print([i])
        tmp = i.replace('\n','').split(' ')
        result.append(tmp)    

    
f.close()
print('----------')
print(result)

-결과 (드래그로 확인가능)

['영희 100\n']
['철수 95\n']
['맹구 20\n']
['영구 5']
----------
[['영희', '100'], ['철수', '95'], ['맹구', '20'], ['영구', '5']]

 

개발자가 선호하는 코딩방식에 따라서

for문과 while문을 선택하여 개발 가능함

 

저장된 파일을 리스트 자료형 또는 문자열 자료형 형태로 사용 가능함

path = 'D:\\tmp\\score.txt'
mode = 'r'
e_type = 'utf8'

f = open(path,mode,encoding = e_type)
result = f.read()
print(type(result))
print(result)
f.close()

print('-------------')
f = open(path,mode,encoding = e_type)
result = f.readlines()
print(type(result))
print(result)
f.close()

-결과 (드래그로 확인가능)

<class 'str'>
영희 100
철수 95
맹구 20
영구 5
-------------
<class 'list'>
['영희 100\n', '철수 95\n', '맹구 20\n', '영구 5']

 

with문을 사용하여 파일을 읽고 쓰고 추가할 수 있음

path = 'D:\\tmp\\test.txt'
mode = 'w'

f = open(path,mode)
f.write('modoo python')
f.close()

path2 = 'D:\\tmp\\test2.txt'
with open(path2,mode) as f:
    f.write('modoo python')

-결과 (이미지)

 

with는 close() 없이  with분기를 빠져나가면

f가 자동으로 종료됨

 

태그
-------------------------------------------------------------
#python, #파이썬, #anaconda, #아나콘다, #기초, #클래스, #class, #import, #selenium, #셀레늄, #자동, #교육, #코딩교육, #coding, #chatgpt, #챗GPT, #로봇,

 

728x90
반응형