파일입출력 & 오류처리 / 사용자 정의 함수

Bor·2021년 11월 17일
0
post-thumbnail

텍스트 파일 읽고 쓰기

(1) 파일 열기

파일 열기 모드

  • r : 읽기모드(r), 기본값. 파일 읽기만 할 때 사용가능하며 생략가능.
  • w : 쓰기모드. 해당파일이 존재할 경우 원래 내용은 모두 사라지고 존재하지 않을 경우 생성
  • a : 추가모드. 기존 파일 뒤에 내용을 추가한다.

(2) 텍스트 파일 쓰기

f  = open('club.txt', 'w')
while True:
    name = input('name:')
    if not name: break
    f.write(name + '\n')		
   #write함수는 자동 개행 기능이 포함되어 있지 않기에 줄 단위로 저장하고 싶다면 개행 문자를 포함 
f.close()

파일 쓰기 모드 ('w')로 파일을 열 때는 기존 파일이 있을 경우 그 파일의 내용이 모두 사라진다.

f = open('club.txt', 'a')
while True:
    name = input('name:')
    if not name: break 		#입력이 없으면 break
    f.write(name + '\n')
f.close()

기존 파일 내용을 유지하면서 새로운 값을 추가해야하는 경우에는 추가모드('a')로 생성

(3) 파일 읽기 : readlines()함수


f=open('name.txt', encoding='utf-8')
data = f.readlines()
for line in data:
    print(line, end='')  #황채연황나연황복동
f.close()

파일 읽기 : read()함수

f = open('name.txt')
data = f.read()
print(data)
f.close()

황채연
황나연
황복동

read()함수는 파일의 전체 내용을 문자열로 반환한다.

파일 읽기 : readline()함수

readline() 함수는 파일의 내용을 한 줄씩 읽어서 문자열로 반환한다. 3줄? 3번 쓰셈

f = open('name.txt', encoding='utf-8')
data = f.readline()
print(data)			#황채연
f.close()

파일 읽기 : readlines()함수

얘는 파일의 모든 줄을 읽어서 리스트로 반환한다.

f = open('name.txt', encoding='utf-8')
data = f.readlines()
print(data)
f.close()

실습 10-2 이름을 입력받고 + 저장 'welcome'을 같이 출력

f = open('guest.txt', 'w')
while True:
    name = input('name: ')
    if not name: break
    print('{} welcome!'.format(name))
    f.write(name + '\n')
f.close()

f=open('guest.txt', 'r')
lines = f.readlines()
cnt = len(lines)
print('total count: {}'.format(cnt))

=============결과===================
name: 보람
보람 welcome!
name: 보라
보라 welcome!
name: 이지
이지 welcome!
name: 보라람
보라람 welcome!
name:
total count: 4

실습 10-3 텍스트 파일에 이번 학기 점수가 저장되어 있다고 가정. 텍스트 파일의 점수를 모두 읽어서 평균을 구한 후 화면에 출력.

f =open('data.txt', 'r')
lines = f.readlines() #전체 줄을 불러들이고
hap = 00
for line in lines: #for문으로 하나씩
    line = line.rstrip() # 공백 &개행 문자도 제거
    score = int(line) # 숫자로
    hap += score
    
avg = hap/len(line)

print('합계: {}'.format(hap)) 
print('평균: {}'.format(avg))

f.close()

합계: 470
평균: 235.0

split()함수는 스페이스, 새로운 라인, tab 등으로 분리해서 값을 리스트 형태로 반환해준다.

합계와 평균을 구한 후 파일에 저장하는 프로그램.


fin  = open('data.txt')
fout = open('output.txt', 'w')
lines = fin.readlines()

hap = 0

for line in lines:
    line = line.rstrip()
    score = int(line)
    hap += score

avg = hap/len(lines)

#저장하기
fout.write('hap: {}'.format(hap))
fout.write('avg: {}'.format(avg))

print('hap: {}'.format(hap))
print('avg: {}'.format(avg))
hap: 470
avg: 94.0

성적 파일에 학생 이름과 성적이 저장되었을 때 성적파일을 읽어서 학점을 계산

f = open('score2.txt', 'r', encoding='utf-8')
lines = f.readlines()
print('이름, 평균, 학점')

for line in lines:
    line = line.rstrip()
    score =line.split(' ')
     
    if(int(score[1]) > 90):
        print("{} {} A".format(score[0], score[1]))
    elif(90 > int(score[1]) >80):
        print("{} {} B".format(score[0], score[1]))
 
 이름, 평균, 학점
김가현 95 A
김혜현 85 B
최지윤 95 A
김연수 100 A

평균기온 출력하기

f = open('weather.txt','r') #열기
lines = f.readlines() 	#읽기

for line in lines:
    line = (line.rstrip()).split(',')	#리스트형으로 변환하기
    mean = (float(line[1]) + float(line[2])) / 2
    print('{}월의 평균기온은 {}입니다'.format(line[0], mean))
     

열어 - > 읽어 -> 더블s -> 니코드의 패턴!

내장함수

  • 정의할 필요 없이 사용가능 (ex max, min)

math

import math
r = 45
radians =r*r*math.pi

random

import random

for i in range(10):
    x = random.random()
    print(x)

랜덤 모듈은 난수를 생성하는 함수를 제공. 0.0과 1.0 사이의 임의의 부동소숫점을 반환

random.randint(5,10) #5

t= [1,2,3]
random.choice(t) # 리스트에서 랜덤한값을 선택 

부동소수점이 아니라 정수로 반환하려면 randint를 사용해야한다.

사용자 정의 함수

max 계산

def my_max(num1, num2):
    if num1 > num2:
        return num1
    else:
        return num2 
a = int(input('1번 숫자:'))
b = int(input('2번 숫자:'))
print(my_max(a,b))

대부분의 다른 프로그래밍 언어와 달리 파이썬에서는 복수 개의 반환이 가능하다. 따라서 여기에서는 단수 반환과 복수 반환의 예를 살펴보고자 한다.

단수 반환

단수 반환은 호출한 함수가 반환하는 값이 1개라는 의미이다.

복수 반환

반환되는 값이 2개 이상일 때는 다음의 예제와 같이 콤마로 나열하면 된다. 이와 같이 복수 개의 반환을 하는 기능은 C언어와 같은 대부분의 다른 언어에서는 지원하지 않는다.

def swap(a,b):
    return b, a 

a = 3
b = 5
print('a는', a, 'b는' ,b)
a, b =swap(a,b) 
print('a는', a, 'b는' ,b)

C언어 계통에서는 얕은 복사가 되지만 파이썬은 포인트형 변수이므로 작동을 한다.

0개의 댓글