변수와 함수의 집합! ➡️ 나만의 자료형 만듦
클래스 안에 변수와 함수를 구현해 놓으면 "." 을 이용해 활용 가능!
class 클래스이름:
def __init__(self):
self.변수명 = 변수값
def 함수명(self, 인자값 변수명, ...):
실행할 코드
실행할 코드
실행할 코드
def 함수명(self, 인자값 변수명, ...):
실행할 코드
실행할 코드
실행할 코드
"생성자" 라고 부르는 함수
클래스 변수가 생성될 때 자동으로 호출되는 함수
클래스 변수 안에 변수를 생성할 때 사용
class 클래스이름:
def __init__(self):
self.변수명 = 변수값
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)
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')
클래스, 함수, 변수의 집합 ➡️ 모듈, 라이브러리, 패키지 등...
모듈, 라이브러리, 패키지 등이 많아졌기 때문에 개발이 쉬워졌다는 말이 나옴!
➡️ 클래스 사용하는 방법에 익숙해져야 함!
한 파일에 계속해서 개발을 하는 것이 아닌, 여러 파일에 나눠 개발하는 것
➡️ "모듈" 로 나눠서 개발한다
내가 원하는 기능들을 여러 파일에 클래스, 함수 등의 형태로 만들고 이것들을 가져다 쓰는 것
➡️ "가져다 쓸 수 있는 것" = 모듈
# 파일 경로 작성시, 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()

# 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()
# from 폴더명.파일명 import 클래스/함수 등
from testlib.my_email import Email
from my_news import News
from my_excel import Excel

name : 해당 클래스를 어디에서 실행했는지 나타낸다.
➡️ 이걸 사용해 해당 클래스를 테스트 해볼 수 있다.
__main__
# open('파일명', 'r') : 해당 파일을 '읽기' 전용으로 열기
datafile = open('data.txt', 'r')
# .read() : 파일 내용 읽기
data = datafile.read()
print(data)
# 파일 읽어오기
datafile = open('data.txt', 'r')
# .readline() : 1줄 읽어 온다.
# line = datafile.readline() : 이렇게 하면 '안녕하세요 + enter' 되어서 나온다.
# 원본 파일의 안녕하세요 다음 줄바꿈을 했기 때문에 그게 고스란히 나오는 것이다!
# 엔터 공백 없애려면 datafile.readline().strip() 사용!
line = datafile.readline() # 1줄만 가져옴
print(line)
# 파일 읽어오기
datafile = open('data.txt', 'r')
line = 'init'
while line: # 빈 공백만 아니면 '참'이기 때문에 line에 아무 문자열이나 집어넣은 것!
line = datafile.readline().strip()
print(line)
# line이 빈 문자열=거짓 일 때까지 반복하기 때문에 해당 파일의 텍스트가 다 출력된 것!
# 입력한 내용이 저장 X ➡️ 최근 입력한 값만 'textfile.txt'파일의 맨 첫 줄에 출력된다.
# 입력 받기
user_input = input('Input: ')
# 파일 'w' 옵션(쓰기)으로 열기
datafile = open('textfile.txt', 'w')
# write() 함수 : 입력값으로 내가 파일에 쓰고 싶은 문자열을 받는다.
datafile.write(user_input+'\n')
# 파일 닫는다
datafile.close()
user_input = input('Input: ')
# 'a' : append - 추가
datafile = open('textfile.txt', 'a')
datafile.write(user_input+'\n')
datafile.close()
comma-separated values
.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)
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()
파이썬 패키지
특정 기능을 여러 클래스로 구성해 놓은 코드 집합
파이썬이 기본적으로 가진 패키지도 많이 있음 ➡️ 기본 패키지
대부분의 패키지는 '레퍼런스 문서'가 있다.
엑셀 다루는 패키지도 여러 종류가 있는데 그 중 openpyxl을 사용해볼 예정
pip3 install openpyxl

데이터를 쓸 엑셀 파일의 파일명으로 클래스 변수 생성
➡️ 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)

['원하는시트명'] 인덱싱으로 원하는 시트를 가져올 수 있다.
# 여러 시트 중 원하는 시트 지정해서 가지고 오는 방법
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 = 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')
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('엑셀파일명', read_only=True)
read_only=True 해주면 읽기 전용 엑셀 파일이 된다
엑세스 될 때마다 가져온다 (용량 큰 경우 합리적!)
순서대로 행 단위씩 가져온다
iter_rows() 함수 사용을 권장!
iter_rows() 함수
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 서버 (메일 받는 서버)
"이메일이 오면 나한테도 보내줘"
메일을 보내기 위해선 서버가 원하는 형태의 모습으로 데이터 가공해야 한다
27th
27th