파이썬의 파일 처리: open(), close()¶
In [ ]:
# open and close
file = open('basic.txt', 'w')
file.write('hello python!')
file.close()
In [ ]:
# with: open과 close 실수 방지
# with open(문자열: 파일 경로, 문자열: 모드) as 파일 객체:
# with 구문이 종료되면 자동으로 파일 닫힘
with open('basic.txt', 'w') as file:
file.write('hihi') # 위 셀에서 적은 'hello python' 덮어쓰기 됨
In [ ]:
# read()
with open('basic.txt', 'r') as file:
contents = file.read()
print(contents)
hihi
In [ ]:
# 데이터 제작
import random
hanguls = list('가나다라마바사아자차카타파하')
with open('info.txt', 'w') as file:
for i in range(100):
name = random.choice(hanguls) + random.choice(hanguls)
weight = random.randrange(40, 120)
height = random.randrange(140, 200)
file.write("{},{},{} \n".format(name, weight, height))
In [ ]:
# 위에서 제작한 데이터로 bmi 계산
with open('info.txt', 'r') as file:
for line in file:
(name, weight, height) = line.strip().split(',') # strip(): 앞뒤 공백 제거
if (not name) or (not height) or (not weight):
continue
# bmi 계산
bmi = int(weight)/((int(height)/100)**2)
result = ""
if 25 <= bmi:
result = "과체중"
elif 18.5 <= bmi:
result = '정상체중'
else:
result = "저체중"
# 출력
print('\n'.join([
'이름:{}',
'몸무게:{}',
'키: {}',
'bmi: {}',
'결과: {}'
]).format(name, weight, height, bmi, result))
print()
이름:다가 몸무게:41 키: 193 bmi: 11.007006899514082 결과: 저체중 이름:마나 몸무게:76 키: 155 bmi: 31.63371488033298 결과: 과체중 이름:바사 몸무게:53 키: 179 bmi: 16.541306451109516 결과: 저체중 이름:가마 몸무게:119 키: 164 bmi: 44.24449732302202 결과: 과체중 이름:나타 몸무게:102 키: 151 bmi: 44.734880049120655 결과: 과체중 이름:타다 몸무게:84 키: 198 bmi: 21.4263850627487 결과: 정상체중 이름:타바 몸무게:81 키: 162 bmi: 30.864197530864192 결과: 과체중 이름:바바 몸무게:52 키: 140 bmi: 26.530612244897963 결과: 과체중 이름:사사 몸무게:71 키: 178 bmi: 22.408786769347305 결과: 정상체중 이름:마아 몸무게:42 키: 148 bmi: 19.174579985390796 결과: 정상체중 이름:사라 몸무게:75 키: 141 bmi: 37.72446054021428 결과: 과체중 이름:차가 몸무게:60 키: 175 bmi: 19.591836734693878 결과: 정상체중 이름:하파 몸무게:119 키: 141 bmi: 59.85614405713999 결과: 과체중 이름:카바 몸무게:99 키: 158 bmi: 39.65710623297548 결과: 과체중 이름:다타 몸무게:70 키: 167 bmi: 25.099501595611173 결과: 과체중 이름:자마 몸무게:72 키: 155 bmi: 29.968782518210194 결과: 과체중 이름:라가 몸무게:59 키: 146 bmi: 27.67873897541753 결과: 과체중 이름:자바 몸무게:111 키: 193 bmi: 29.799457703562513 결과: 과체중 이름:차차 몸무게:53 키: 179 bmi: 16.541306451109516 결과: 저체중 이름:다자 몸무게:91 키: 168 bmi: 32.242063492063494 결과: 과체중 이름:자가 몸무게:55 키: 195 bmi: 14.464168310322158 결과: 저체중 이름:차타 몸무게:43 키: 173 bmi: 14.367336028601022 결과: 저체중 이름:하라 몸무게:116 키: 190 bmi: 32.13296398891967 결과: 과체중 이름:아다 몸무게:104 키: 196 bmi: 27.072053311120367 결과: 과체중 이름:타차 몸무게:97 키: 155 bmi: 40.37460978147762 결과: 과체중 이름:아파 몸무게:117 키: 180 bmi: 36.11111111111111 결과: 과체중 이름:자카 몸무게:101 키: 140 bmi: 51.530612244897966 결과: 과체중 이름:파사 몸무게:65 키: 152 bmi: 28.133656509695292 결과: 과체중 이름:가사 몸무게:111 키: 174 bmi: 36.66270313119303 결과: 과체중 이름:아사 몸무게:50 키: 145 bmi: 23.781212841854934 결과: 정상체중 이름:하사 몸무게:90 키: 145 bmi: 42.80618311533888 결과: 과체중 이름:파하 몸무게:71 키: 166 bmi: 25.76571345623458 결과: 과체중 이름:가마 몸무게:115 키: 150 bmi: 51.111111111111114 결과: 과체중 이름:사아 몸무게:51 키: 186 bmi: 14.74158862296219 결과: 저체중 이름:다바 몸무게:92 키: 157 bmi: 37.32402937238833 결과: 과체중 이름:차가 몸무게:69 키: 141 bmi: 34.70650369699714 결과: 과체중 이름:자타 몸무게:114 키: 146 bmi: 53.480953274535565 결과: 과체중 이름:바타 몸무게:109 키: 152 bmi: 47.17797783933518 결과: 과체중 이름:바나 몸무게:114 키: 179 bmi: 35.57941387597141 결과: 과체중 이름:카마 몸무게:47 키: 189 bmi: 13.157526385039613 결과: 저체중 이름:라사 몸무게:102 키: 167 bmi: 36.57355946789057 결과: 과체중 이름:사차 몸무게:94 키: 144 bmi: 45.33179012345679 결과: 과체중 이름:나차 몸무게:98 키: 177 bmi: 31.28092182961473 결과: 과체중 이름:타자 몸무게:109 키: 157 bmi: 44.22086088685139 결과: 과체중 이름:바파 몸무게:114 키: 159 bmi: 45.09315296072148 결과: 과체중 이름:가하 몸무게:60 키: 144 bmi: 28.935185185185187 결과: 과체중 이름:바사 몸무게:54 키: 155 bmi: 22.476586888657646 결과: 정상체중 이름:다다 몸무게:82 키: 188 bmi: 23.20054323223178 결과: 정상체중 이름:마카 몸무게:111 키: 156 bmi: 45.611439842209066 결과: 과체중 이름:사마 몸무게:56 키: 141 bmi: 28.167597203359996 결과: 과체중 이름:마차 몸무게:67 키: 147 bmi: 31.005599518719055 결과: 과체중 이름:나차 몸무게:82 키: 179 bmi: 25.592209980961893 결과: 과체중 이름:자하 몸무게:88 키: 176 bmi: 28.40909090909091 결과: 과체중 이름:가다 몸무게:107 키: 155 bmi: 44.5369406867846 결과: 과체중 이름:가라 몸무게:68 키: 196 bmi: 17.700957934194086 결과: 저체중 이름:바차 몸무게:66 키: 140 bmi: 33.673469387755105 결과: 과체중 이름:나바 몸무게:103 키: 178 bmi: 32.50852165130665 결과: 과체중 이름:나하 몸무게:45 키: 161 bmi: 17.360441340997646 결과: 저체중 이름:사나 몸무게:48 키: 199 bmi: 12.12090603772632 결과: 저체중 이름:자라 몸무게:54 키: 157 bmi: 21.907582457706194 결과: 정상체중 이름:가카 몸무게:82 키: 195 bmi: 21.56476002629849 결과: 정상체중 이름:자바 몸무게:99 키: 150 bmi: 44.0 결과: 과체중 이름:아가 몸무게:118 키: 172 bmi: 39.88642509464576 결과: 과체중 이름:아아 몸무게:59 키: 173 bmi: 19.713321527615356 결과: 정상체중 이름:나가 몸무게:92 키: 197 bmi: 23.70584142853462 결과: 정상체중 이름:타마 몸무게:85 키: 196 bmi: 22.12619741774261 결과: 정상체중 이름:마타 몸무게:81 키: 198 bmi: 20.66115702479339 결과: 정상체중 이름:마하 몸무게:65 키: 180 bmi: 20.061728395061728 결과: 정상체중 이름:바자 몸무게:117 키: 187 bmi: 33.4582058394578 결과: 과체중 이름:나나 몸무게:57 키: 184 bmi: 16.836011342155007 결과: 저체중 이름:아마 몸무게:49 키: 170 bmi: 16.955017301038065 결과: 저체중 이름:차카 몸무게:63 키: 153 bmi: 26.91272587466359 결과: 과체중 이름:나타 몸무게:78 키: 163 bmi: 29.357521924046825 결과: 과체중 이름:차파 몸무게:52 키: 162 bmi: 19.81405273586343 결과: 정상체중 이름:바차 몸무게:115 키: 187 bmi: 32.88627069690297 결과: 과체중 이름:라다 몸무게:76 키: 153 bmi: 32.46614549959418 결과: 과체중 이름:나다 몸무게:117 키: 170 bmi: 40.484429065743946 결과: 과체중 이름:마하 몸무게:67 키: 190 bmi: 18.559556786703602 결과: 정상체중 이름:카카 몸무게:77 키: 144 bmi: 37.13348765432099 결과: 과체중 이름:사나 몸무게:84 키: 184 bmi: 24.8109640831758 결과: 정상체중 이름:차파 몸무게:85 키: 199 bmi: 21.464104441807024 결과: 정상체중 이름:차파 몸무게:60 키: 188 bmi: 16.976007243096426 결과: 저체중 이름:카아 몸무게:62 키: 181 bmi: 18.924941241109856 결과: 정상체중 이름:하파 몸무게:76 키: 140 bmi: 38.77551020408164 결과: 과체중 이름:하마 몸무게:65 키: 197 bmi: 16.74869231363859 결과: 저체중 이름:카라 몸무게:90 키: 159 bmi: 35.59985760056959 결과: 과체중 이름:라마 몸무게:94 키: 163 bmi: 35.37957770333848 결과: 과체중 이름:아사 몸무게:84 키: 148 bmi: 38.34915997078159 결과: 과체중 이름:아라 몸무게:91 키: 194 bmi: 24.178977574662557 결과: 정상체중 이름:타차 몸무게:61 키: 167 bmi: 21.872422819032593 결과: 정상체중 이름:다타 몸무게:71 키: 155 bmi: 29.552549427679498 결과: 과체중 이름:차마 몸무게:107 키: 199 bmi: 27.019519709098255 결과: 과체중 이름:하나 몸무게:68 키: 169 bmi: 23.80869017191275 결과: 정상체중 이름:사나 몸무게:94 키: 163 bmi: 35.37957770333848 결과: 과체중 이름:다파 몸무게:60 키: 190 bmi: 16.62049861495845 결과: 저체중 이름:나다 몸무게:95 키: 197 bmi: 24.478857996856398 결과: 정상체중 이름:바사 몸무게:86 키: 187 bmi: 24.59321112985787 결과: 정상체중 이름:카파 몸무게:103 키: 157 bmi: 41.78668505821737 결과: 과체중 이름:파아 몸무게:44 키: 167 bmi: 15.776829574384166 결과: 저체중 이름:하차 몸무게:89 키: 153 bmi: 38.01956512452475 결과: 과체중
In [ ]:
f = open("demofile3.txt", "a")
f.writelines(["\nSee you soon!", "\nOver and out."])
f.close()
#open and read the file after the appending:
f = open("demofile3.txt", "r")
print(f.read())
See you soon! Over and out.
generator¶
- return generator object
- 이터레이터를 직접 만들 때 사용하는 코드로 함수 내부에 yield 키워드 사용시 해당 함수는 generator가 된다
- 메모리의 효율성을 위해 함수의 코드를 조금씩 실행할 때 사용한다
- generator는 일반 함수와는 달리 함수를 호출해도 함수 내부 코드가 실행되지 않는다
- next()를 사용해 함수 내부 코드 실행하며, 이때 yield 키워드 부분까지만 실행하고 next()의 리턴값으로 yield 키워드 뒤 입력한 값을 출력한다.
In [ ]:
# 함수 선언
def test():
print('호출완료')
yield 'test'
# 함수 호출
print('A 지점 통과')
test()
print('B 지점 통과')
test()
print(test())
A 지점 통과 B 지점 통과 <generator object test at 0x000001EFF2B4B7C0>
In [ ]:
# 함수 선언
def test():
print('지점1')
yield 1
print('지점2')
yield 2
print('지점3')
# 함수 호출
output = test()
# next() 호출
print('지점4')
print(next(output))
print('지점5')
print(next(output))
print('지점6')
print(next(output))
#print(next(output)) # yeild 못만나고 함수 끝날 경우 stopiteration error 발생
지점4 지점1 1 지점5 지점2 2 지점6 지점3
--------------------------------------------------------------------------- StopIteration Traceback (most recent call last) Cell In[8], line 22 19 print(next(output)) 21 print('지점6') ---> 22 print(next(output)) 24 print(next(output)) StopIteration:
In [ ]:
'Basic for AI > 파이썬' 카테고리의 다른 글
torch.fill_() vs torch.full() (0) | 2024.09.07 |
---|---|
SytaxError와 Exception의 차이 (0) | 2024.02.29 |