0816 TIL
🪴 클래스
변수와 함수의 집합! ➡️ 나만의 자료형 만듦
클래스 안에 변수와 함수를 구현해 놓으면 "." 을 이용해 활용 가능!
- 클래스 문법
class 클래스이름:
def __init__(self):
self.변수명 = 변수값
def 함수명(self, 인자값 변수명, ...):
실행할 코드
실행할 코드
실행할 코드
def 함수명(self, 인자값 변수명, ...):
실행할 코드
실행할 코드
실행할 코드
🌱 init 함수는?
-
"생성자" 라고 부르는 함수
-
클래스 변수가 생성될 때 자동으로 호출되는 함수
-
클래스 변수 안에 변수를 생성할 때 사용
class 클래스이름:
def __init__(self):
self.변수명 = 변수값
- 함수에 써있는 "self"는?
- 클래스의 변수, 함수에 접근하기 위해 필요한 변수
➡️ self 안 쓰면 init 함수 내에서만 작동하는 지역변수가 되어서 class의 변수에 접근할 수 X! - 꼭! 잊지말고 써줘야 함!!
- 클래스의 변수, 함수에 접근하기 위해 필요한 변수
class SimpleTest:
def __init__(self):
# class 안에 my_data = 100인 변수가 만들어짐
self.my_data = 100
print('Call init!')
# simple 변수는 SimpleTest란 class 모양을 가진 함수가 된다. ➡️ 변수에 클래스를 넣어줌
simple = SimpleTest()
print(simple.my_data)
#####################################################
# self 안 썼을 때
class SimpleTest:
def __init__(self):
my_data = 100
print('Call init!')
simple = SimpleTest()
# simple.my_data 'AttributeError' 발생!
# my_data 변수는 self. 가 안 붙어있기 때문에 __init__ 함수의 지역변수라 class에서 사용할 수 없다!
print(simple.my_data)
self는 꼭 잊지말고 써줘야 한다!!!!!
class SimpleTest:
# print_skip 함수 파라미터의 self 변수는 카운트하지 않는다 ➡️ print_skip 함수는 총 1개의 파라미터를 갖고 있는 것과 마찬가지
# self 는 꼭 꼭!! 써줘야 한다!! ➡️ class 내의 함수, 변수에 접근하기 위해 사용하는 것이기 때문!! (__init__함수 외에서도 self는 꼭 사용해줘야 함)
def print_skip(self, string):
if 'skip' in string:
print('Skip')
return
print(string)
simple = SimpleTest()
simple.print_skip('bad')
🪴 모듈
🌱 클래스를 알아야 하는 이유
-
클래스, 함수, 변수의 집합 ➡️ 모듈, 라이브러리, 패키지 등...
-
모듈, 라이브러리, 패키지 등이 많아졌기 때문에 개발이 쉬워졌다는 말이 나옴!
모듈은 클래스, 함수, 변수 등을 활용하여 작성 됨.
➡️ 클래스 사용하는 방법에 익숙해져야 함!
🌱 모듈이란?
-
한 파일에 계속해서 개발을 하는 것이 아닌, 여러 파일에 나눠 개발하는 것
➡️ "모듈" 로 나눠서 개발한다 -
내가 원하는 기능들을 여러 파일에 클래스, 함수 등의 형태로 만들고 이것들을 가져다 쓰는 것
➡️ "가져다 쓸 수 있는 것" = 모듈
🌱 모듈 활용/사용하기 - from ~ import
- 다른 파일의 코드 사용
# 파일 경로 작성시, main.py면 main만 입력!
from <py파일 경로> import <변수, 함수 혹은 클래스명>
# ex
from my_email import Email
from my_news import News
from my_excel import Excel
m_email = Email()
m_news = News()
m_excel = Excel()
- 파일을 총 4개 만들어서 'my_~.py'엔 모듈을 생성하고 'auto.py' 파일에선 나머지 3개 파일들을 from import해서 사용
- import만 사용하기
총 2가지 방법이 있다.
1. from 라이브러리/모듈(.py파일) import 함수/클래스 등
2. import 라이브러리/모듈- import만 사용해 가져온 라이브러리/모듈에서 사용하고자 하는 클래스/함수 등을 .으로 불러오기
# ex
# 1.
# from 라이브러리/모듈 import 함수/클래스
# 라이브러리/모듈 안에 있는 함수/클래스 등 실행
from my_email import Email
# import 라이브러리/모듈
# 라이브러리/모듈(.py 파일)만 import로 가져오기
import my_news
from my_excel import Excel
m_email = Email()
# 2.
# Import만 사용해 가져온 라이브러리/모듈에서 사용하고자 하는 클래스/함수 등을 .으로 불러오기
m_news = my_news.News()
m_excel = Excel()
- 폴더 안에 있는 .py 파일을 from ~ import 하고 싶을 때
# from 폴더명.파일명 import 클래스/함수 등
from testlib.my_email import Email
from my_news import News
from my_excel import Excel
- (+) pycache
: 파이썬 파일이 모듈로 사용됐을 때 생성되는 폴더
삭제해도 된다
🌱 모듈 활용/사용하기 - name (내장변수)
name : 해당 클래스를 어디에서 실행했는지 나타낸다.
➡️ 이걸 사용해 해당 클래스를 테스트 해볼 수 있다.
- 직접 해당 파일 실행시
__main__
- 모듈 가져다 쓴 경우 (from ~ import)
해당 파이썬 파일명 나온다 (폴더명.파일명 or 파일명)
🪴 텍스트 파일 읽고 쓰기
- 파일의 모든 내용 출력
# open('파일명', 'r') : 해당 파일을 '읽기' 전용으로 열기
datafile = open('data.txt', 'r')
# .read() : 파일 내용 읽기
data = datafile.read()
print(data)
- 파일 내용 1줄만(첫 줄) 출력
.readline() : 1줄 읽어 온다.
# 파일 읽어오기
datafile = open('data.txt', 'r')
# .readline() : 1줄 읽어 온다.
# line = datafile.readline() : 이렇게 하면 '안녕하세요 + enter' 되어서 나온다.
# 원본 파일의 안녕하세요 다음 줄바꿈을 했기 때문에 그게 고스란히 나오는 것이다!
# 엔터 공백 없애려면 datafile.readline().strip() 사용!
line = datafile.readline() # 1줄만 가져옴
print(line)
- 파일 내용 1줄씩 다 출력
# 파일 읽어오기
datafile = open('data.txt', 'r')
line = 'init'
while line: # 빈 공백만 아니면 '참'이기 때문에 line에 아무 문자열이나 집어넣은 것!
line = datafile.readline().strip()
print(line)
# line이 빈 문자열=거짓 일 때까지 반복하기 때문에 해당 파일의 텍스트가 다 출력된 것!
- 사용자에게 입력 받은 내용을 파일에 출력 (내용 저장 X ➡️ 'w' 쓰기 옵션만 설정했기 때문)
'w' : 쓰기
# 입력한 내용이 저장 X ➡️ 최근 입력한 값만 'textfile.txt'파일의 맨 첫 줄에 출력된다.
# 입력 받기
user_input = input('Input: ')
# 파일 'w' 옵션(쓰기)으로 열기
datafile = open('textfile.txt', 'w')
# write() 함수 : 입력값으로 내가 파일에 쓰고 싶은 문자열을 받는다.
datafile.write(user_input+'\n')
# 파일 닫는다
datafile.close()
- 사용자에게 입력 받은 내용을 파일에 저장해 출력
(내용 저장 O ➡️ 'a' 추가 옵션 설정했기 때문)- 사용자가 입력한 내용들이 차례로 해당 파일에 저장된다.
- 'a' : 추가
user_input = input('Input: ')
# 'a' : append - 추가
datafile = open('textfile.txt', 'a')
datafile.write(user_input+'\n')
datafile.close()
🪴 텍스트 파일 다루기
🌱 csv 파일이란?
comma-separated values
- ','(컬럼 구분)와 개행 문자(행 구분)로 구분된 파일
- 엑셀과 유사한 형태로 읽고 쓸 수 있다.
🌱 csv 형태의 파일 읽기
.readlines() : 전체 내용을 행 단위로 [ ] 리스트 형태로 가져온다.
datafile = open('data.csv', 'r')
# .readlines() : 전체 내용을 행 단위로 [ ] 리스트 형태로 가져온다.
for line in datafile.readlines():
data = line.strip().split(',')
print(data[0])
print(data[1])
print(data[2])
print('-'*10)
🌱 csv 형태의 파일 읽기
values = []
values.append(('alghost', 'fastone'))
values.append(('yskim', 'fastcampus'))
values.append(('jelee', 'fastfive'))
# 'result.csv' 이름의 csv 파일이 새로 생성된다.
datafile = open('result.csv', 'w')
for line in values:
# '값'.join(값넣을곳) : 값넣을곳 사이 사이에 '값'을 넣고 싶다
# line의 값 사이에 ',' 넣는다는 뜻
data = ','.join(line)
datafile.write(data+'\n')
datafile.close()
🌱 pypi
파이썬 패키지
🪴 엑셀 다루기 소개 및 패키지 설치
🌱 패키지란?
-
특정 기능을 여러 클래스로 구성해 놓은 코드 집합
-
파이썬이 기본적으로 가진 패키지도 많이 있음 ➡️ 기본 패키지
-
대부분의 패키지는 '레퍼런스 문서'가 있다.
🌱 엑셀 다루는 패키지 - openpyxl
엑셀 다루는 패키지도 여러 종류가 있는데 그 중 openpyxl을 사용해볼 예정
- 맥 다운로드 명령어
pip3 install openpyxl
- openpyxl 공식 문서
https://openpyxl.readthedocs.io/en/stable/index.html
- 패키지 설치 확인 방법
vscode 터미널에서 'python3' 입력시 밑의 이미지와 같은 메세지가 뜬다면 설치 완료된 것!
import 사용해 패키지 가져온다
🪴 엑셀 파일 내용 읽기
🌱 원하는 엑셀 파일 가져오기
-
데이터를 쓸 엑셀 파일의 파일명으로 클래스 변수 생성
➡️ load_workbook() 함수 이용해서 변수에 할당! -
openpyxl 패키지의 load_workbook('파일명')함수
➡️ 기존에 있던 엑셀 파일을 파이썬 안으로 가져옴- 입력 값으로 '파일명'을 받는다.
- 입력 값으로 받은 파일 내용을 읽어서 클래스로 만든다.
-
.active
➡️ "해당 변수의 활성화된 시트를 가져오겠다"
활성화된 엑셀 시트 (가장 마지막에 사용했던 엑셀 시트가 열린다.)
# openpyxl이란 패키지 안에 load_workbook이란 함수 가져옴
from openpyxl import load_workbook
# load_workbook() : 입력 값으로 받은 파일 내용을 읽어서 클래스로 만들어줌
# load_workbook() 사용해 엑셀 파일을 파이썬 안으로 가져옴
# 클래스로 만든 것을 변수 wb에 할당함.
wb = load_workbook('simple_data.xlsx')
# .active : 활성화된 엑셀 시트 (가장 마지막에 사용했던 엑셀 시트가 열린다.)
# wb.active : "wb 변수의 활성화된 시트를 가져오겠다" 는 뜻
data = wb.active
# data['A1'] : []안에 셀 주소 들어간다.
# data['A1'].value : 'A1' 셀의 value 값을 가져온다는 뜻
print(data['A1'].value)
print(data['A2'].value)
print(data['B1'].value)
print(data['B2'].value)
- 엑셀의 각 셀은 밑의 이미지에 나와있는대로 class 형태로 인식된다.
🌱 원하는 시트 지정해서 가져오기
- 변수명['sheet_test']
['원하는시트명'] 인덱싱으로 원하는 시트를 가져올 수 있다.
# 여러 시트 중 원하는 시트 지정해서 가지고 오는 방법
from openpyxl import load_workbook
wb = load_workbook('simple_data.xlsx')
# wb['sheet_test'] : ['원하는시트명'] 인덱싱으로 원하는 시트를 가져올 수 있다.
data = wb['sheet_test']
# data['A1:B2'] : 엑셀에서 사용하는 방식 그대로 원하는 행/열 지정해서 가져올 수 있다.
area = data['A1:B2']
print(area)
for row in area:
for cell in row:
print(cell.value)
print('-'*20)
cols = data['A:B']
for col in cols:
for cell in col:
print(cell.value)
print('-'*20)
rows = data['1:2']
for row in rows:
for cell in row:
print(cell.value)
- 이런 식으로 원하는 행/열 지정해 가져올 경우 area 값은 밑의 이미지와 같다.
➡️ 튜플 안에 튜플의 형식으로 cell class가 출력된다.
# 원하는 행/열 지정해 가져올 경우
area = data['A1:B2']
🪴 엑셀 파일에 내용 쓰기
🌱 엑셀 파일 생성 후 셀 값 생성 - 인덱싱
-
Workbook
기존에 없는 엑셀 파일 가져오기 위해 (엑셀 파일 생성) -
.create_sheet('시트이름')
: 엑셀 시트 생성 -
인덱싱 사용한 셀 값 할당
변수['셀위치'] = '셀값'
# Workbook 클래스 : 기존에 없는 엑셀 파일 가져오기 위해 (엑셀 파일 생성)
from openpyxl import Workbook
# 클래스 변수 생성
wb = Workbook()
# .create_sheet('시트이름') : 엑셀 시트 생성
ws = wb.create_sheet('sheet_test2')
# 셀을 생성하고 값을 할당한다.
# 변수['셀위치'] = '셀값'
ws['A1'] = 'alghost'
ws['B1'] = 'test'
# .save('엑셀파일명') : 설정한 엑셀파일명으로 저장해준다.
wb.save('result2.xlsx')
🌱 엑셀 파일 생성 후 셀 값 생성 - 인덱싱
- .append()
- 행 단위로 데이터 넣을 때 사용
- 입력 값에 리스트, 튜플의 형태로 데이터 넣기
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet('sheet_test3')
# .append() : 행 단위로 데이터 넣을 때 사용
# 리스트, 튜플의 형태로 데이터 넣기
ws.append(['Number', 'Name'])
# 위에서 한 번 .append()를 사용했기 때문에
# for문의 내용은 2번째 행부터 들어가게 된다.
for i in range(10):
ws.append([i, str(i) + ' data'])
wb.save('result3.xlsx')
🪴 큰 엑셀 파일 내용 읽기
- load_workbook 의 문제점
지정한 엑셀 파일의 모든 내용을 파이썬으로 한 번에 가져온다.
➡️ 용량 큰 경우, 속도 느림 등의 문제 발생- 엑셀 파일이 매우 큰 경우 못 가져오는 경우 발생
- 한 번에 가져오는 과정이 매우 느림
🌱 해결 방법 - 필요한 부분만 가져오는 방법
-
load_workbook('엑셀파일명', read_only=True)
read_only=True 해주면 읽기 전용 엑셀 파일이 된다-
엑세스 될 때마다 가져온다 (용량 큰 경우 합리적!)
-
순서대로 행 단위씩 가져온다
-
iter_rows() 함수 사용을 권장!
-
-
iter_rows() 함수
- (순서대로) 한 행씩 데이터를 가져오는 함수
- .iter_rows(max_col=1, max_row=2)
➡️ 이런 식으로 영역 지정할 수 있다.
from openpyxl import load_workbook
# read_only=True : 읽기 전용 엑셀 파일이 된다.
# => read_only=True 사용시, .iter_rows() 함수 사용을 권장한다.
# => 엑세스 될 때마다 가져온다 (용량 큰 경우 합리적!)
# => "내가 필요할 때만 가지고 오게 된다"
wb = load_workbook('test_data.xlsx', read_only=True)
data = wb.active
# print(data['A']) => error : read_only=True는 순서대로 행 단위씩 가져오기 때문에
# 위처럼 열인 ['A']를 부르면 오류가 난다.
# .iter_rows() : (순서대로) 한 행씩 데이터를 가져오는 함수
# .iter_rows(max_col=1, max_row=2) : 영역 지정할 수 있다.
for row in data.iter_rows(max_col=1, max_row=2):
for cell in row:
print(cell.value)
🪴 이메일 발송 원리
🌱 필요한 설정 정보
- SMTP 서버 주소 : 메일 보내는 서버 주소
- POP 서버 주소 : 메일 받는 서버 주소
- SMTP 서버 포트 : SMTP 주소로 갈 때 쓸 길 번호
- POP 서버 포트 : POP 주소로 갈 때 쓸 길 번호
- 계정 정보 : 아이디, 비밀번호
서버 - 하나의 컴퓨터라 생각
포트 - '길'
서버 인터넷 연결시 주소 ➡️ 포트
🌱 이메일 동작 원리
-
사용자 ➡️ SMTP 서버
"이렇게 이메일 보내줘"
보낼 때 형식이 있다. 그 형식대로 보내야 한다. -
사용자 ➡️ POP 서버 (메일 받는 서버)
"이메일이 오면 나한테도 보내줘"
메일을 보내기 위해선 서버가 원하는 형태의 모습으로 데이터 가공해야 한다
- 보내는 사람, 받는 사람, 제목, 내용 등
- SMTP 서버에 로그인
- SMTP 서버로 데이터 전송
🌱 텍스트 이메일 보내기
27th
🌱 텍스트 이메일 주소 유효성 검사
27th
- 정규 표현식
Author And Source
이 문제에 관하여(0816 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@everdeen40500/0816-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)