![[TIL] 2024-07-16](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7Bsvo%2FbtsICf7PPe4%2FVjtHM5wKkJK5raK5Aiz5u1%2Fimg.jpg)
Today I Learned (2024-07-16) 🤔
오늘 공부한 내용 🧑🏻💻
1. 인프런(나도코딩)
Pickle
- 영상이 짧아서 중요하지 않은 주제인 것 같았다.
- Pickle 🥒: 프로그램에서 파일 형태로 데이터를 저장하는 것
- 파일을 받은 사람은
pickle
을 다시 열어서 사용 import pickle
필요- 항상 바이너리 타입으로 읽고 써야 한다.
- 파일을 받은 사람은
With 문
파일을 열고 다시
close()
를 선언할 필요가 없다.예제 코드:
with open("study.txt", "w", encoding="utf8") as study_file: study_file.write("파이썬을 열심히 공부하고 있어요.") with open("study.txt", "r", encoding="utf8") as study_file: print(study_file.read())
2. KDT(천재교육)
파이썬
2차원 리스트
2차원 리스트란?
1차원 직선 형태의 리스트를 벗어난 2차원 평면 형태의 리스트이다.
리스트를 원소를 가지는 리스트
이다.2차원 리스트는
행렬(Matrix)
이라고도 하며, 세로(행)와 가로(열)의 길이를 가진다.2차원 리스트 표현
matrix = [[1,2,3],[4,5,6],[7,8,9]] print(matrix) # [[1,2,3],[4,5,6],[7,8,9]]
# 가독성을 높인 표현 matrix = [ [1,2,3], [4,5,6], [7,8,9] ] print(matrix) # [[1,2,3],[4,5,6],[7,8,9]] print(matrix[0])# [1,2,3] print(matrix[1])# [4,5,6] print(matrix[2])# [7,8,9]
원소 접근 및 수정
matrix = [ [1, 8, 4], [7, 3, 9], [5, 2, 6] ] print(matrix[0][0]) # 1 print(matrix[1][2]) # 9 # 접근 후 수정 matrix[0][2] = 0 print(matrix) # [[1, 8, 0], [7, 3, 9], [5, 2, 6]]
중첩 반복문을 이용한 2차원 리스트 순회
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 0, 1, 2] ] for i in range(len(matrix)): for j in range(len(matrix[i])): print(matrix[i][j], end=" ") print()
1 2 3 4 5 6 7 8 9 0 1 2
파이썬 테스트
- 그동안 배운 파이썬 기본 문법들이 나오는 테스트를 봄
객체 지향 프로그래밍(Object Oriented Programming)
파이썬의
객체 지향 프로그래밍(OOP)
에 대해 배웠다.파이썬의 모든 건 객체라고 한다.
velog 해당 블로그에서 자세히 설명이 되어 있기에 정독을 한 번 해야겠다.
객체(Object)
객체
=>정보
를 가지고,행동
할 수 있는 존재(속성과 행동)- 예를 들어,
mane
라는 사람은 이름과 나이 같은 정보를 가지고 있으며, 걷거나 말하는 행동을 할 수 있다. - 객체 지향 프로그래밍에서는 이러한 정보와 행동을 하나로 묶어
객체
로 표현한다.
클래스(class)
클래스
란?객체의 설계도이며 클래스는 쉽게 말해서
객체에 대한 정보와 행동을 설계
한 코드이다.예시:
# Person 이라는 클래스이다. # 이름, 나이, 행성 이라는 정보를 가지고 있다. # Introduce 라는 행동을 가지고 있다. # 이러한 정보와 행동을 설계한 것을 클래스라고 한다. class Person: # 생성자 메서드 # 객체를 생성할 때 실행되는 메서드 def __init__(self, name, age): # 객체의 속성 == 인스턴스 변수 self.name = name self.age = age self.planet = "Earth" # 인스턴스 메서드 # self 는 첫 번째 매개변수 위치에 무조건 있어야 한다. def Introduce(self): # Introduce 를 호출하면 나이와 이름을 소개하는 문자열을 출력. print(f"저의 이름은 {self.name}, 나이는 {self.age}")
클래스 변수: 모든 인스턴스가 공유하는 속성
생성자 메서드: 인스턴스를 생성할 때 실행되는 함수(
__init__
)- 🚨 메서드의 첫 인자에는 무조건
self
가 있어야 한다. 🚨
- 🚨 메서드의 첫 인자에는 무조건
인스턴스 메서드: 인스턴스가 할 수 있는 행동을 정의하는 함수
- 🚨 메서드의 첫 인자에는 무조건
self
가 있어야 한다. 🚨
- 🚨 메서드의 첫 인자에는 무조건
인스턴스 변수: 각각의 인스턴스가 고유하게 가지는 속성
self: 클래스 자기 자신을 가리킨다. 🤔 (ex. C++의 this 같은?)
- 더 찾아보니 즉, 객체 자기 자신을 참조하는 매개변수이다.
- 참고 사이트
인스턴스(Instance)
인스턴스(Instance)란?
- 클래스에서 생성된 객체이다. 클래스를 사용(호출)하여 인스턴스를 생성한다.
인스턴스 생성
클래스()
를 통해 해당 클래스의 인스턴스를 생성할 수 있다.class Person: def __init__(self, name, init_age): self.name = name self.age = init_age self.planet = "Earth" # 인스턴스 생성 (person1, person2) person1 = Person("mane", 25) person2 = Person("rogan", 20)
인스턴스 접근
인스턴스.속성
을 통해 해당 인스턴스의 특정 속성에 접근할 수 있다.# 인스턴스 생성 person1 = Person("mane",20) name = person1.name # person1의 name 접근 => mane age = person1.age # person1의 age 접근 => 20
인스턴스 메서드
인스턴스.메서드()
를 통해 메서드를 호출할 수 있다.# 인스턴스 생성 person = Person("mane", 20) # 인스턴스 메서드 호출 # 클래스 설명 부분에서 만든 Person 클래스의 Introduce() 메서드이다. person.Introduce() # 저의 이름은 mane 입니다. 나이는 20살입니다.
상속
- 오늘 강의에서는 상속이라는 것이 있다는 것만 알려주시고 넘어갔다.
3. 크롤링
HTML 구조
- 크롤링을 하기 위해서는 HTML의 구조를 알고 있어야 한다.
HTML
이란? 웹 페이지를 만들기 위한 언어이다.- HTML 문서는
요소(element)
로 구성되어 있다. - 각 요소는
태그(tag)
,속성(Attribute)
,글(Text)
로 구성되어 있다. - 태그에 따라 고유한 속성을 가지고 있다.
- 요소(element)
- 태그
- HTML의 요소는
<태그>
와</태그>
로 감싸여져 있다. - 요소의 시작을 나타내는 태그는
여는 태그 <태그>
, 끝을 나타내는 태그는닫는 태그 </태그>
이다. - 예시 코드:
<p>p 태그는 문단을 의미한다.</p> <h1>h1 태그는 헤더(제목)을 의미한다.</h1>
- HTML의 요소는
- 속성(attribute)
- 태그에 대한 추가 정보를 정의할 수 있다.
- 링크, 이미지 등등
- 글(text)
- 그냥 쓰여지는 텍스트이다.
- 태그
- 요소(element)
요청(Request)와 응답(Response)
- 서버에 요청을 하면 응답을 보내준다.
HTTP 통신
이다.
- 파이썬에서는
requests
라는 라이브러리를 사용한다.- requests란?
- 개발자가 간편하고, 효율적으로
HTTP 프로토콜
을 처리할 수 있도록 도와주는 도구
- 개발자가 간편하고, 효율적으로
- requests란?
- HTTP 상태 코드를 활용해 코드 제어를 할 수 있다.
- 대표적으로
200(성공)
,400(잘못된 요청)
,404(페이지를 찾을 수 없음)
,500(서버 오류)
등이 있다.
- 대표적으로
- 예시 코드
import requests # 요청 및 응답 response = requests.get("https://naver.com") print(response) # <Response [200]> print(type(response)) # <class 'requests.models.Response'> # 코드 확인 status_code = response.status_code print(status_code) # 200 print(type(status_code))# <class 'int'> # url 페이지의 텍스트 얻어오기 text = response.text
- 서버에 요청을 하면 응답을 보내준다.
어려웠던 내용 📚
- 파이썬에서의
인스턴스 변수
,클래스 변수
,인스턴스 메서드
등 무언가 C++이랑 개념이 비슷하면서 다른 느낌이라서 이해가 안되는 부분이 있었다.- 이 또한 하다 보면 이해가 될 것 같다.
- 어려웠던 부분은
self
로 만든 변수는 멤버변수인가? 전역변수인가? 지역변수인가? 에 대한 의문이었다.GPT-4
의 도움을 받은 결과self
로 만들어진 변수는 접근지정자 중 private에 속한 변수였다. 클래스 변수
는 전역변수인 것 같다.
궁금한 내용과 부족한 내용 🙋🏻
1. 파이썬 Pickle 🥒
피클(pickle)은 파이썬 객체를
직렬화(serialize)
하고역직렬화(deserialize)
하는 모듈이다.주요 기능
- 직렬화: 객체를 바이트 스트림으로 변환
- 역직렬화: 바이트 스트림을 객체로 복원
주요 함수
pickle.dump(obj, file)
: 객체obj
를 파일 객체file
에 피클링pickle.load(file)
: 파일 객체file
로부터 피클된 객체를 읽어옴pickle.dumps(obj)
: 객체obj
를 피클링하여 바이트 스트림 반환pickle.loads(bytes_object)
: 바이트 스트림으로 피클된 객체 읽어 옴
예제
import pickle # 예제 객체 data = {'name': 'Alice', 'age': 30, 'score': [90, 85, 88]} # 객체를 파일에 저장 (직렬화) with open('data.pkl', 'wb') as file: pickle.dump(data, file) # 파일에서 객체를 읽어오기 (역직렬화) with open('data.pkl', 'rb') as file: loaded_data = pickle.load(file) print(loaded_data)
주의 사항🚨
- 1) 보안 문제 : 신뢰할 수 없는 소스의 피클 파일은 로드하지 말 것.
- 2) 버전 호환성 : 파이썬 버전 간 호환성 문제 발생
- 3) 인간이 읽을 수 없음 : 피클 파일은 바이너리 형식
대안
- 1) JSON : 인간이 읽을 수 있는 형식, 기본 자료형에 적합
- 2) Dill : 피클의 확장판, 더 많은 객체 타입 지원
바이트 스트림
피클을 대한 내용을 찾다가 바이트 스트림이 무엇인가에 대해 찾아보았다.
바이트 스트림이란?
데이터를 연속적인 바이트로 표현한 것
느낀점 💡
- 솔직히 한 번에 외워지지 않을 것을 안다... 나는 써보면서 익혀야겠다.
'TIL (2024) > 2024.07' 카테고리의 다른 글
[TIL] 2024-07-18 (3) | 2024.07.19 |
---|---|
[TIL] 2024-07-17 (0) | 2024.07.17 |
[TIL] (2024-07-15) (0) | 2024.07.16 |
TIL (2024-07-14) (0) | 2024.07.14 |
TIL (2024-07-13) (0) | 2024.07.13 |
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!