알쏭달쏭 공부한거 쓰기
7/12-파일처리 본문
명시적으로 닫는 close() 보다 with 구문으로 열고 닫기
바이너리는 안 다룬다. 시간부족으로
r+ 읽기모드로 열었다가 변경할 수 있다.
readline()-1라인만 읽는다. 라인의 끝까지 읽는데 끝의 개행문자까지 읽는다.
파일이 끝나면 빈 문자열 반환>이걸로 전체 읽어보기
줄넘김 기호 제거를 위해 rstrip()사용
readlines() -read()
list로 반환--str로 반환
*오늘 할거
readline()으로 전체 읽기
read(argument)이용
2번 추구함.
#readline()으로 전문읽기
def readline_test():#파일 복사 프로그램 작성: 복사본 파일명=>copy.py
with open('bmi.py','rt',encoding='utf8')as f:
with open('copy.py','w',encoding='utf8') as ff:
while True:
line=f.readline()#한라인만 읽음-> 다읽을려면 무한 반복
if line=='':#파일 끝
print('end')
break
ff.write(line ) #-> 콘솔이 아닐 새 파일에 작성하면 된다.
#rstrip 없애야 개행 제대로 나온다. 왜냐하면 print가 없으니까!
#print(line.rstrip(),file=ff)
#ff.write(line.rstrip())
#from tkinter import *def clicked(): weight = float(input_weight.get()) height = float(input_height.get())/100#bmi 계산시 키는 m단위로 변환 bmi = weight/height**2 rslt.config(text = f'당신의 체질량 지수(BMI): {bmi:.2f}')window = Tk()Label(window, text = '체중(kg): ').grid(row = 0, column = 0)# 이 레이블은 콜백함수에서 변경할 일이 없으므로 이름을 붙여 주지 않고 바로 배치해도 무방합니다.input_weight = Entry(window, width = 30)input_weight.grid(row = 0, column = 1)Label(window, text = '키(cm): ').grid(row = 1, column = 0)input_height = Entry(window, width = 30)input_height.grid(row = 1, column = 1)btn = Button(window, text = 'BMI 계산', command = clicked)btn.grid(row = 2, column = 0, columnspan = 2, sticky = W+E+N+S)rslt = Label(window, text = '당신의 체질량 지수(BMI): ')rslt.grid(row = 3, column = 0, columnspan = 2)window.mainloop()
#개행없이 연결해서 출력된다.
readline_test()
readline().rstrip()으로 전문을 읽어올때
라인에는 공백과 개행이 있는데 빈라인인 경우 rstrip()되면서 공백을 줄 수 있는데 이경우 덜 읽었는데 break되서 끝난다.
이럴경우에는 먼저 ''검사를 먼저 하고 다음에 rstrip()으로 사용한다.
이런 경우는 상대 경로를 이용하는데
다른 절대경로를 이용하는 경우에는 어느파일에 있는지 다 작성해야한다.
또한\제어문자의 경우에는 \\를 써야 \를 의미한다.
C:\Users\PC00\Desktop>C:\\Users\\PC00\\Desktop 써야한다.
def readline_test():#파일 복사 프로그램 작성: 복사본 파일명=>copy.py
with open('C:\\Users\\PC00\\Desktop\\counter.py','rt',encoding='utf8')as f:
with open('copy.py','w',encoding='utf8') as ff:
while True:
line=f.readline()#한라인만 읽음-> 다읽을려면 무한 반복
if line=='':#파일 끝
print('end')
break
ff.write(line )
readline_test()
#읽기 test
#read(argument)이용
def read_test():
with open('bmi.py',encoding='utf8')as f:
print(f.read(10)) #10글자 읽어옴 >>from tkint
read_test()
argument 값만큼 읽는다.
read()인자를 비워두지 말고 read(10)을 이용하여 파일 전문읽기
마찬가지로 다 읽으면 빈 문자열을 보낸다.
파일 내용 모두 콘솔에 출력해보기
def read_test():
with open('bmi.py',encoding='utf8')as f:
while True:
line=f.read(10)
if line=='':
print('end')
break
print(line,end='') #end 안붙여주면 10개 쓰고 자동 개행 된다.
read_test()
CSV 파일 처리
일반 엑셀보다 크기가 작으며
일반 엑셀은 메모장에서 안열리지만 .csv에서 메모장에서 열면 열린다.
• Comma Separated Value>,로 값들이 분리된다.
공공기관에서 제공하는 데이터는 csv로 되어 있어서 처리할 수 있으면 좋다.
CSV모듈을 이용하면 쉽게 이용할 수 있다.
CSV는 테이블 형식의 데이터를 저장하고 이동하는데 사용되 는 구조화된 텍스트 파일
import csv
def csv_test():
with open('weather.csv')as f:
data=csv.reader(f) #한 라인씩 얻어올 수 있다.
'''
print(next(data))
#날짜,지점,평균기온(℃),최저기온(℃),최고기온(℃)
#['날짜', '지점', '평균기온(℃)', '최저기온(℃)', '최고기온(℃)']
#['1980-04-01', '108', '6.5', '3.2', '11.7']
#['1980-04-02', '108', '6.5', '1.4', '12.9']
#각 성분을 문자열로 인식해서 리스트에 담아서 준다.
for x in data:
print(x)
'''
#가장 더운날 구하기
print(next(data))
a=next(data)
hottem=float(a[4])
hotday=a[0]
for x in data:
if hottem<float(x[4]):
hottem=float(x[4])
hotday=x[0]
print(f'가장 더웠던 날:{hotday} 기온: {hottem}')
csv_test()
#각 성분을 문자열로 인식해서 리스트에 담아서 준다.
#map,filter> 둘다 이터레이터 이다./gnerater로 보기
def filter_generator():
ages=[34,39,20,18,13,54]
ft=filter(lambda x:x>=19,ages)
print(ft)#>리스트로 캐스팅 했음
print(next(ft))#차례로 출력해준다.
for x in ft:
print(x)
filter_generator()
https://colab.research.google.com/drive/1uococtEI2292KMzDQjtTwl6EaXsy5X6v?usp=sharing
>>> import os
>>> os.listdir()
['bmi.py', 'calculator.py', 'copy.py', 'counter.py', 'fah_to_cel.py', 'hello.txt', 'practice.py', 'read test.py', 'weather.csv', 'we_will_rock.txt']
#현재 폴더의 모든 파일을 보여준다.
>>> for x in os.listdir(): #파일을 하나씩 x로 보내준다.
... if x[-2:]=='py':
... print(x)
...
bmi.py
calculator.py
copy.py
counter.py
fah_to_cel.py
practice.py
read test.py
실습 5,6번
## 5. 현재 작업 디렉토리에서 파이썬 소스 파일만 찾으시오. 그 중 파일 내용 중 'python'이 포함된 파일명과 라인을 출력하는 프로그램을 작성하세요.
---
실행 결과
```
alpha_tst.py: python
week09.py: if 'python' in line.strip():
```
import os
def a():
for x in os.listdir():
if x[-2:]=='py':
#if x.endswith('py')==True
with open(x,encoding='utf8') as f:
for line in f:
if 'python' in line:
print(f'{x}:{line.rstrip()}')
a()
6번-예외처리
## 6. 파일명을 입력 받아 해당 파일에서 한 라인을 읽어와 출력하려 한다. 아래와 같이 존재하지 않는 파일명을 입력할 경우 예외가 발행하여 비정상 종료된다. 아래 예외를 처리하세요.
---
예외 처리 전 실행 예시: 존재하지 않는 파일명 입력 시 예외 발생
```
파일명: abc.txt
Traceback (most recent call last):
File "C:\Users\heyjk\OneDrive\바탕 화면\ELEC520\강의자료\파일\week09.py", line 128, in <module>
excption_tst3()
File "C:\Users\heyjk\OneDrive\바탕 화면\ELEC520\강의자료\파일\week09.py", line 116, in excption_tst3
with open(a, 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'abc.txt'
```
예외 처리 후 실행 예시
```
파일명: abc.txt
abc.txt 파일을 찾을 수 없습니다. 파일 이름을 확인해주세요.
파일명: alpha_tst.py
aaaaaaaaaa
```
import os
def a():
#무한 반복
while True:
f_name=input('file name:')
with open(f_name,'rt') as f:
print(f.readline().rstrip()) #없으면 비정상 에러가 된다.
a()
예외처리 try except 이용
def a():
#무한 반복
while True:
try:
f_name=input('file name:')
with open(f_name,'rt') as f:
print(f.readline().rstrip()) #없으면 비정상 에러가 된다.
except FileNotFoundError:
print(f'{f_name}파일을 찾을 수 없습니다. 다시 확인해주세요')
else:
break
a()
https://colab.research.google.com/drive/10whQY5LVOcMW1FIE6I2FqJyvTBzUTKNp
#제외
numpy 제외>배열과 비슷한 리스트
c의 배열보다 느리다, why, 리스트에 여러 자료형을 넣다보니 오래 걸림 직접 값에 접근하려면 주소를 통해 접근해야하기 때문에 오래 걸린다. 따라서 numpy에서 제공하는 배열을 이용하면 빠르게 사용할 수 있다.
넘파이의 배열은 한가지의 자료형만 담을 수 있다.
matplot만 범위에 들어감
import matplotlib.pyplot as plt
def a():
x = [ 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun' ]
y1 = [15.6, 14.2, 16.3, 18.2, 17.1, 20.2, 22.4] #서울 날씨
y2 = [20.1, 23.1, 23.8, 25.9, 23.4, 25.1, 26.3] #부산 날씨
plt.plot(x,y1)#(y1)하면 인덱스가 된다.
plt.show()
a()
연결된 선으로 표현된다.
import matplotlib.pyplot as plt
def a():
x = [ 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun' ]
y1 = [15.6, 14.2, 16.3, 18.2, 17.1, 20.2, 22.4] #서울 날씨
y2 = [20.1, 23.1, 23.8, 25.9, 23.4, 25.1, 26.3] #부산 날씨
plt.plot(x,y1,'o')#(y1)하면 인덱스가 된다.
plt.show()
a()
'o'하면 점으로 표현된다.
import matplotlib.pyplot as plt
def a():
x = [ 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun' ]
y1 = [15.6, 14.2, 16.3, 18.2, 17.1, 20.2, 22.4] #서울 날씨
y2 = [20.1, 23.1, 23.8, 25.9, 23.4, 25.1, 26.3] #부산 날씨
plt.plot(x,y1,'o')#(y1)하면 인덱스가 된다.
plt.plot(x,y2,'v')
plt.title('Temperature of two cities')
plt.xlabel('Day')
plt.ylabel('Temperature')
plt.show()
a()
legend-네모 박스 없으면 안 뜬다.
import matplotlib.pyplot as plt
def a():
x = [ 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun' ]
y1 = [15.6, 14.2, 16.3, 18.2, 17.1, 20.2, 22.4] #서울 날씨
y2 = [20.1, 23.1, 23.8, 25.9, 23.4, 25.1, 26.3] #부산 날씨
plt.plot(x,y1,'o',label='Seoul')#(y1)하면 인덱스가 된다.
plt.plot(x,y2,'v',label='Busan')
plt.legend()
plt.title('Temperature of two cities')
plt.xlabel('Day')
plt.ylabel('Temperature')
plt.show()
a()
# 막대 그래프 Bar
import matplotlib.pyplot as plt
def a():
x = [ 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun' ]
y1 = [15.6, 14.2, 16.3, 18.2, 17.1, 20.2, 22.4] #서울 날씨
y2 = [20.1, 23.1, 23.8, 25.9, 23.4, 25.1, 26.3] #부산 날씨
plt.bar(x,y1,label='Seoul')#(y1)하면 인덱스가 된다.
plt.title('Temperature of two cities')
plt.xlabel('Day')
plt.ylabel('Temperature')
plt.show()
a()
day14- matplot 1번까지만 시험 범위
csv 파일
가장 더웠던 날과 추운 날 출력하기
import csv
def a():
with open('weather.csv','r') as f:
a=csv.reader(f)
print(next(a))
b=next(a)
hottep=b[-1]
hotday=b[0]
coldtep=b[-1]
coldday=b[0]
for x in a:
if float(hottep)<float(x[-1]):
hottep=x[-1]
hotday=x[0]
if float(coldtep)>float(x[-1]):
coldtep=x[-1]
hotday=x[0]
print(f'가장 더운날{hotday}, 가장 더운 온도:{hottep}')
print(f'가장 추운날{coldday}, 가장 더운 온도:{coldtep}')
a()
대체시험: 기말고사 범위 내에서 나온다.
'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글
과제 복습-전체 복습 (0) | 2023.07.12 |
---|---|
기말 (0) | 2023.07.12 |
이터레이터 추가 학습 in Youtube (0) | 2023.07.11 |
HW11-파일 처리, map,filter (0) | 2023.07.11 |
7/11 12장 (0) | 2023.07.11 |