Head First Python
책 정보
- 출판사 : 한빛미디어
- 출판년도 : 2011년10월28일(초판)
- 참고 자료
- 예제 사이트
- 원저 사이트
- 출처 : Head First Python (한빛출판사)
저자 정보
- 원저자 : 폴 배리
- 변역자 : 강권학
약어들(용어들)
- BIF : 내장 함수 , Build In Funtion
- suite : 들어쓴 블록 코드 ?
- PyPI : Python Package Index , 인터넷에서 파이썬 써드파티 모듈을 제공하는 중앙 리포지토리(repository)
- traceback : 역추적, 에러 발생 시 알려주는 방법
- 예외(exception) : 파이썬에서는 런타임 에러를 의미 한다.
관련 Web Sites
- http://pypi.python.org : PyPI 웝 사이트
- 파이썬 튜투리얼을 한글로 번역하였다 : 링크
Windows PowerShell : 추후 다시 다른 곳으로 정리
- 축약어 보기 : alias 명령어
- 도움말 보기
- help 명령어
- help
- [F7] : 이전 명령어 목록 보기
- [F8] : 마지막 실행한 명령어 보기
- ls 혹은 dir
- ls -r : 재귀적
- ls -n : 이름만
- 디렉토리 생성 : mkdir
- 파일 이동 : mv
- tree : 나무 형태로 디렉토리 구조 보여 주기
- tree /F 디렉토리 : 파일도 보여주기
IDLE 단축키들
- [Tab] : 자동 완성 목록 제공
- [Alt + P] : 이전 입력 내용
- [Alt + N] : Next 입력 내용
- [F5] : 모듈 코드 실행
Python BIF(내장함수)
- list() : data 객체를 만든다, 빈 리스트를 생성
- range() : 필요한 범위에 일련의 숫자를 생성하고 나열자를 반환
- enumerate() : 0부터 시작해서 번호가 매겨진 테이터의 리스트를 생성
- int() : 문자열이나 다른 숫자를 정수로 변환한다
- id() : 파이썬 객체의 고유한 식별자를 반환하다
- next() : 리스트와 같은 나열할 수 있는 data 구조체에서 다음 항목을 반환 한다.
- print() : 출력 한다.
- 예) print("\t",end='') --> 탭를 출력하고 줄바꿈은 문자는 없음을 의미
- open() : 파일 열기
- file 관련
- readline() : 한줄 읽기
- close() : 파일 닫기
- seek() : 파일 위치 이동
- split() : 분활 하기
- find() : 주어진 문자의 위치를 찾는다. 없으면 -1 값을 반환
- 모듈 os
- getcwd() : 현재 디렉토리
- chgdir() : 디렉토리로 이동
- path.exists() : 파일 존재 여부
- help() : 도움말
- str() : 문자열 형 객체로 변환
- locals() : 집합 객체를 반환 한다.
Python Error
- ValueError : 런타임에러 , 값이 너무 많거나 , 너무 적어서
- IOError : 파일에서 발생하는 에러
하나 장 (2016년4월5일)
파이썬 관련 사이트들
- 한글 위키백과 사전 : 링크
- 파이썬 공식 사이트 : http://www.python.org/
- 파이썬 강좌 사이트
- 한글 강좌 사이트
- 여러사이트가 존재 한다. 추후 정리 필요
- Python 도구들
- eclipse도 가능 함
- JetBrains PyCharm Community Edition 2016.1 -> 이것을 사용중임
- IDLE : 기본 도구
- OS X : TextMate
- WingIDE : 파이썬 개발자 전용 IDE
정리
- 주석 :
- # : 한줄 주석
- “”” “”” : 여러줄 주석
- 파이썬 설치 하기
- 심화 학습이 필요하다.
- 리눅스 설치시 실패 하였다. : python3 버젼 설치 하다 실패
- 리눅스는 source complie 설치
- 추후 다시 도전 할까나 : 관련 사이트 정보
- http://lunatine.net/python27-34-on-rhel-centos/
- 설치 EUC-KR 오류가 발생하면 LANG=C 로 설정하고 한다
- python3 or python -V : 버젼 정보 확인 하기
- python.exe 혹은 python2(3) : 인터리트 환경 제공
- 인터프리터를 끝내고 싶다면 quit()
- IDLE 도구 : 기본으로 제공하는 개발도구 , 위치는
- WIN : 설치홈 > Lib > idlelib > idle.bat
- Linux : /usr/local/bin/idle ,그러나 실행되지 않고 Tk 오류라고 한다.
- 추후 잡아 보자
- 주요 단축키들
- [Tab] : 자동 완성 목록 제공
- [Alt + P] : 이전 입력 내용
- [Alt + N] : Next 입력 내용
- 배열 선언
- 변수명 = []
- 배열 안에 배열 가능
- 리스트 출력
- for x in list :
print(x)
- 문자열 : “ “ , ‘ ‘
- 문자열에서 “ 사용하기 ‘’ 감싸거나 , \”
- 조건 분기
- if 조건:
실행하는 스위트
else:
실행하는 스위트
- 내장함수 목록 보기
- dir(__builtins__)
- 도움말 보기 : help(print)
- 함수 정의
- def 함수이름 ( 인자 ) :
함수 코드 스위트
- 파이썬 파일 확장자는 : py
Chapter 2, 함수 모듈
정리
- 파이썬 모듈 경고 보여 주기
- import sys; sys.path
- “ ; “ : 여러 문자을 동시에 한줄에 표시하고자 할때 사용함.
- 파이썬 모듈 배포 순서
- 배포준비
- 폴더 생성
- setup.py 생성
from distutils.core import setup |
- 배포 패키지 만들기
- 배포 패키지 생성
- python.exe setup.py sdist
- 파이썬 환경에 설치 : 리눅스 경우 관리자 권한 필요
- python.exe setup.py install
- 배포 패키지 구조 보기
NESTER |
- 모듈 사용하기 :
- import module
- 다른 방법 : from module import function
- 위 방법은 현재 네임스페이스 동일한 함수를 덮어쓰게 됨.
- 네임스페이스
- __main__ : 기본 네임스페이스
- nester : 사용자 모듈 네임 스페이스
- 사용예 : nester.print_lol()
- 코드를 PyPI에 등록하기
- python.exe setup.py register
- python.exe setup.py sdist upload
- *.pyc 파일 ?
- 인터프리터가 여러분의 모듈 코드를 처음으로 실행할 때 코드를 읽어서 내부적인 바이트 코드를 실행되는 것
- 내장함수(BIF)의 네임스페이스
- __builitins__
- range() 사용예
for num in range(10): print(num) |
- 선택적 인자
- 기본값을 지정, 생략하면 기본값이 지정됨
- 예 : def print_lol(the_list, level = 0):
Chapter 3. 에러 처리
정리
- 파일 열고 -> 한줄씩 읽고 -> 출력하고 -> 닫기
the_file = open('file.txt') the_file.seek(0) for each_line in the_file: print(each_line) the_file.close() |
- 테이터 나누기
- (role , line_spoken) = each_line.split(":")
- role : 첫번째 구분 영역
- line_spoken : 두번째 혹은 나머지 구분 영역 , 만약 split(“:”,1) 일때는
나머지 구분 영역
- 반대 조건
- if not Boolean:
- 에러을 피하는 방법
- 논리 검사 코드 추가 : 일반적으로 다른 프로그램에서 처리한다.
- 예외 처리 기법
- 런타임에러(Python에서는 예외)를 무시 하면 크래시 됩니다.
- Python 에러 처리 메커니즘
- 먼저 실행하고, 나중에 복구하기
- try/except/finally
- try: 런타임 에러를 발생시킬 수도 있는 코드
- except: 여러분이 정의한 에러 복구 코드
- finally: 마무리 실행되는 코드
- Python의 두종류 리스트
- 변형없는 리스트 : tuple , () , 괄호
- 변형될수 있는 리스트 : [] , 대괄호
- pass : 빈 문장 , empty/null 문장이라고 하기도 함.
Chapter 4. 영속성
정리
- else if 대신 elif 로 사용함.
- open() : 함수를 사용하여 파일 읽거나 쓰거나
- Read : read_f =open('data.out','r')
- Write : out_f= open('data.out’,'w')
- close() : 파일을 닫아서 캐쉬의 내용을 실제 파일에 쓴다.
- 파이썬에서는 문자열은 불변 이다.
- 그외 불변들
- 숫자
- 불변형 리스트 터플
- with 문을 사용한 파일 작업 처리
- 예제)
try: data = open('its.txt','w') -------------------------- with open('its.txt','w') as data: |
- with 사용 시 잇점은 finally를 사용하여 파일을 닫을 필요가 없음.
- print(‘파일을 쓸 내용’,file=out_f) : out_f에 내용을 출력 한다.
- file : 올수 있는 내용
- sys.stdout (기본값)
- sys.stderr
- file 객체
- end 파라 미터 : 기본값을 \n(개행 문자), 이며 일반 행을 마지막 문자를 의미 한다.
- pickle : 모든 데이타 객체를 파일 저장/읽기를 하는 표준 라이브러리
- dump() : 테이터 저장
- load() : 테이터 읽기
import pickle |
- str() : 어떤 객체는 문자열로 변환 한다.
- locals() : 현재 위치에서 접근할 수 있는 변수들의 집합을 반환 한다.
- in : 연산자를 하여 특징 집합에 존재여부를 확인 할 수 있다.
- if ‘find_var_name’ in locals(): -> 주어진 로컬 변수에 변수를 찾는다.
Chapter 5. 데이터의 이해
정리
- 두 가지 정렬
- 원본 정렬 : sort() , 즉 원본 자체를 정렬
- 사본 정렬 : sorted() , 사본을 생성하여 정렬
- 정렬 파라미터 reverse=True|False , True 이면 내림 차순
- 리스트의 지능화
- 리스트를 다른 리스트로 변환 하는 일을 정리
- 변환된 데이터를 저장할 리스트 생성
- 원래 리스트의 모든 테이터 항목을 나열
- 나열하면서 각 데이터 항목을 변환
- 변환된 데이터를 새 리스트에 추가
clean_list = [] |
- 집합 : 중복된 데이터가 없음
- data_set = set() : 빈 집합을 생성함. 팩토리 함수 사용
- data_set = set(list) : 주어진 리스트 받아서 집합을 생성
- 서브리스트 설명 : my_list[Index:End] 이면
- Index : 시작 Offset
- End : 항목 index 이전 까지 가져 온다.
Chapter 6. 사용자 정의 데이터 객체
정리
- 딕셔너리 혹은 해시맵
- 빈 맵 선언 : {} 를 사용 함
- dict() : 팩토리 함수를 사용
- dict_data = {‘key_name’ : ‘value’ ,}
- 데이터 설정 : dict_data[‘key_name’]
- 코드와 데이터 하나로 -> 클래스
- 코드 : 메소드
- 데이터 : 속성
- 객체 : 인스턴스
- Code
정의 class Athlete: def __init__(self): __init__ : 초기화 메소드 혹은 생성자 라고 하기도 함. self : 자신을 가르 킨다. 생성 a = Athlete() |
Chapter 7. 웹 개발
정리
- 웹 기반 애플리케이션 : 웹앱
- Template 모듈 : 파일이나 문자열의 $변수를 치환 하는 기능을 제공함(참고)
- 예) Template(text).substitute(변수=값)
- 표준 라이브러리임
- 웹 서버 : 파이썬 자체적인 http.server(웹 서버) 라이브러리를 모듈을 포함하고 있음(표준 라이브러리)
from http.server import HTTPServer, CGIHTTPRequestHandler |
- glob.glob(“xxx/*.txt”) : xxx 디렉토리의 확장자가 txt인 파일 목록을 필터링하여 가져 온다.
- 디렉토리 파일을 가져 온다
- 쉘 스크립트 파일 처럼
- 실행 python 스크립트 파일의 첫 번째 라인은 : #! /usr/local/bin/python3
- 파이썬 설치 위치나 버젼에 따라 틀림
- chmod +x 속성을 준다
- 폼 데이터 가져 오기 (표준 라이브러리)
- 관련 모듈 cgi
- 모든 폼 딕셔너리 가져오기 : form_data = cgi.FieldStorage()
- cgi 관련 추적 라이브러리
- 모듈명 : cgitab
- 활성화 : cgitab.enable()
- @property 키워드 : 객체 메소드를 속성처럼 호출 하도록 해 준다.
Chapter 8. 모바일 웹 개발
추후 최신 버젼으로 공부가 필요하다.
정리
- 각 모바일 OS에서 수행 가능한 Python 환경을 조사 하고 정리 하라
- json
- json_list = json.dumps(python_list) : 파이썬 리스트를 json 리스트로 변환
- python_list = json.loads(json_list): json 리스트를 파이썬 리스트로 변환
- 언어 중립적
- Content-type : application/json 임
Chapter 9. 테이터 관리
SQLite 공부 필요
- 참고 사이트
- 공식 사이트 : 링크
- 한글 참고 : #1 ,
- SQLite 도구 사용하기 : FireFox 플러그인용 SQLite Manager가 좋음
정리
- 파이썬 DB API Life Cycle
- 연결
- 생성
- 조작
- 커밋 / 롤백
- 닫기
import sqlite3 |
- 결과값 처리 메소드
- cursor.fetchone() : 한 행을 반환
- cursor.fetchmany() : 여러 행을 반환
- cursor.fetchall() : 모든 데이터를 반환
- os
- 프로그램의 환경 정보 수집 가능 함.
Chapter 11. 복잡한 문제 처리
정리
부록A
정리
- 전문적인 IDE 사용하기
- WingWare Python IDE
- 범위
- 전역 변수를 기본으로 변경 할 수 없음 변경하기 위해서는 global 이라는 것을 먼저 사용해야 함
- 테스트
- unittest
- doctest
- 고급 언어 기능
- 익명 함수
- 생성자
- 사용자 정의 예외
- 함수 수식어
- 메타 클래스
- 정규표현식
- 웹 프레임워크에 대한 첨언
- WSGI
- 검색 엔진
- Django
- Zope
- TurboGears
- Web2py
- Pylons
- 객체 관계 맵퍼 와 NoSQL
- ORM (Object Relational Mapper) : SQL Alchemy
- NoSQL : CouchDB , MongoDB
- GUI 프로그래밍
- tkinter
- 다른 기술들
- PyGTK
- PyKDE
- wxPython
- PyQT
- 피해야 할것
- CPython
- GIL :Global Interpreter Lock
- 파이썬 인터프리터는 하나의 스레트만 실행 함
- 즉 쓰레드를 사용하지 말라는 뜻
처음만나는 파이썬 Python
책 정보
- 출판사 : Jpub
- 출판년도 : 2017년3월(초판)
- 참고 자료
저자 정보
- 원저자 : 가마타 마사히로
- 변역자 : 이동규
기타 정보
- JetBrains PyCharm Community Edition에서 CVS 설정하여 cvs 사용하기
- 우선 CVS 저장소 관련 Project Directory 생성한다.
- CVS 설정 정보 (
약어들(용어들)
JetBrains PyCharm Community Edition 의 CVS 설정 하기
기본 설정
- 메뉴 : VCS > CVS > Configure CVS Roots
- + (추가) 버튼 클릭 후 CVS root 의 [Edit by Field] 버튼 클릭
- Method : 프로토콜 방식 , 예) ext
- User : 계정명 , 예) cvs
- Port : 입력하지 않으면 기본값
- Host : 서버 도메인 주소 혹은 IP 주소, 예) namusoft.vps.phps.kr
- Repository : 저장소 주소 , 예) /home/cvs/sdev
- [v] Use internal SSH implementation
CVS 서버 작업
- /home/cvs/sdev 하위에 프로젝트 관련 디렉토리 생성함.
- mkdir STUDY_11_Python
설정 (Setting)
- Version Control
- Directory : <Project>
- VCS : CVS
CVS commit 작업 수행
- VCS > Browse VCS Repository > Browse CVS Repository
- 화면 하단의 Browse CVS Repository 탭에서 STUDY_11_Python 선택후
- 프로젝트 선택 한 후 팝업 메뉴
- CVS > Commit Directory
- 혹은 Commit Files : 파일 선택시
프로그램 작성 시 주의 사항
- [] , {} , () -> 서로 다른 의미를 갖는다.
- () 형 데이터는 추후의 내용 변경 불가능 하다?
공백 사용
- indent(들어쓰기)를 사용하지 않으면 동작 하지 않는다. -> 문법으로 강조한다.(좋은 생각이다)
파이썬의 코딩 규약 (PEP8)
- Python Enchancement Proposal8
- PEP20 -> Zen (불교의 선)
import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! |
연산자
- 거듭제곱 : **
- >>> 2 ** 3
- 8
- 복소수 : 계산 가능 **추가 공부 필요함.
- >>> (4 + 5j) - (3 - 4j)
- (1+9j)
파이썬2 와 파이썬3의 나머지 연산 차이
- Python 2
- >>> 1931/12 = 160
- >>> 1931.0/12 = 160.91666666666666
- Python 3
- >>> 1931/12 = 160.91666666666666
- >>> 1931//12 = 160
- 소수점 아래 나머지를 버리고 싶을 때
변수명 규칙
- 첫번째 숫자x
- 예약어 x
예약어 확인 하기
- >>>import keyword;keyword.kwlist
- 예약어들
- ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
비교 연산자
- 자바와 거의 동일
- 10 <= a <= 30 : 가능 함.
데이터 형
- 수치형
- 정수
- 부동소수점
- 복소수 (허수부를 j|J)
- 문자열형
- ‘’ , “”
- ‘’’ ~ ‘’’ : 복수행의 문자열 생성 한다.
‘’’
[tab]Sun
[tab]Mon
‘’’
‘\nSun\nMon\n’ --> 자동 변경됨
- 논리형 : True | False
- 리스트형 (나열)
- [57, ‘banna’, ‘apple’]
- append(<추가>)
- remove(<삭제>)
- sort() : 정렬
- 동일형 일때만 가능 함.
- 사전형 (key)
- {색인1:데이터1, 색인2:데이터2}
- dictions[색인1]
- keys() : 키 목록
- values() : 값 목록
- 튜플형 (변경 불가)
- (요소1,요소2,...)
- 사전형의 key로 사용가능함. 리스트는 불가능
- 집합형
- {요소1,요소2,...)
- 변경 가능, 중복 제거 효과가 있음.
- set()를 이용하여 집합 생성 가능
- update([])를 통해 추가 가능
- 집합 연산 가능
- A <= B : B에 A의 모든 요소가 포함되는지 조사
- A >= B : A에 B의 모든 요소가 포함되는지 조사
- A | B : A와 B 합집합
- A & B : A와 B 교집합
- A - B : A에 B에 차집합
- A ^ B : A와 B의 합집합 중 교집합을 제외
문자열형 처리
- + : 문자 + 수치형 (결합 불가)
- 참고 사이트 (링크)
- * : 반복 결합
조건문
- if <조건>:
elif <조건>:
else: - and , or 를 사용함.
for 사용법들 (~하는 동안)
- ** 문자열 합치기는 ‘+’로 가능 하지만 , 문자 + 숫자는 숫자를 str(숫자)로 변환 하여 합쳐 친다.
- merge
- for <변수> in range (<반복하고 싶은 횟수>):
[tab] 반복처리 문장#1
[tab] 반복처리 문장#2 - for <변수> in <리스트>:
- for <변수> in <사전형>:
while : 무한루프
- 종료 키 : ctrl + c
- break , continue
함수
- 서식
def <함수의 이름>(<파라미터>): [tab] 처리1 [tab] 처리2 [tab] return <반환값> |
내장 함수
- import를 사용하지 않아도 되는 함수
- len(<파라미터>) : 문자의 수 나 리스트의 수
- max(),min() : 최대 , 최소 값
- sorted() : 정렬하기
- print() : 콘솔에 출력
- type() : 테이터 타입 조사
- dir() : 인터랙티브 shell에서 많이 사용, 어떤 메소드가 있는지 할 수 있음.
- dir(<문자열>) : 문자열 관련 메소드나 변수
- dir() : 실행한 시점에 유효한 변수
- 내장 함수 관련 도움말
- Python 3
- Python 2
예외 처리
- 서식
try : [tab] 처리A (에러가 발생할 수 있는 처리) except : [tab] 처리B |
- 예외 처리 관련 도움말
- Python 3.5 Document
- Python 2.7 Document
클래스
- self 라는 함수 정의시 사용하는 첫번째 인자 이며 이름이 반드시 self일 필요는 없다.
- __init__ : 초기 설정값을 전달하는 메소드
상속
- 기술하는 방법
class 클래스이름(부모클래스이름): [tab] 변수 [tab][tab] 메소드 이름: [tab][tab] 메소드 의 내용 |
- 오버라이드
- 부모클래스의 동일한 이름으로 메소드 정의
- 부모 클래스의 메소드 호출 방법과 초기값 설정
- super(자식클래스이름,초기값)
표준 라이브러리
- import 사용법 : 목적 라이브러리를 사용할 수 있도록 해줌.
- import <모듈명>
- 예제
>>> import calendar >>> print(calendar.month(2018, 11)) |
- as : 라이브러리 이름을 간단하게 표시 할 수 있도록 함.
- import <모듈명> as <축약명>
- 예제
>>> import calendar as cal >>> print(calr.month(2018, 11)) |
- from : 패키지에 특정 모듈만 사용하거나 혹은 모듈에서 특정 클래스와 함수만 사용할 때
- from <패키지(모듈)이름> import <모듈이름>,<클래스이름>,<함수>
- 예제
>>> from calendar import month, isleap >>> print(month(2018, 11)) |
기타 표준 라이브러리
- 공식문서
- 파이썬3 : https://docs.python.org/3.6/library/index.html
- 파이썬2 : https://docs.python.org/2/library/index.html
- 시간/날짜 관련 표준 라이브러리
- datetime 모듈
- 공식문서
- 파이썬3 : https://docs.python.org/3.6/library/datetime.html
- 파이썬2 : https://docs.python.org/2/library/datetime.html
- date형을 문자열로
- 현재 날짜 구하기
- date.today()
- strftime(‘%Y-%m-%d’)
- 2018-11-11
- 날짜 형식
Symbol | Displayed |
%Y | 연도 네자리 (2018) |
%y | 연도 두자리 (18) |
%m | 월 두자리 (11) |
%B | 월 영어로 (December) |
%b | 월 영어로 축약(Dec) |
%A | 요일 영어로 (Monday) |
%a | 요일 영어로 축약(Mon) |
- 현재날짜와 시간을 취득
- datetime.now()
- 시간표시 형식
Symbol | Displayed |
%H | 24시간 표시 |
%I | 12시간 |
%p | AM/PM 표시 (오전,오후) |
%M | 분을 두자리로 |
%S | 초를 두자리로 |
%f | 마이크로초를 여섯자리로 |
- 날짜 더하기 , 빼기
- timedelta(days = 7) : 일주일 차이 만들기
- zip 파일 사용하기
- zipfile 모듈
- 도움말
- 파이썬3 : https://docs.python.org/3.6/library/zipfile.html
- 파이썬2 : https://docs.python.org/2/library/zipfile.html
- 압축풀기
import zipfile files = zipfile.ZipFile(‘<파일명>’) files.namelist() # 집파일에 들어 있는 파일 보여주기 files.extract(‘python.exe’) #특정 파일만 압축해지 할때 files.extractall() # 모든 파일 압축해지 files.close() |
- 압축하기
import zipfile zfile = zipfile.ZipFile(‘<파일명>.zip’, mode=’w’) zfile.write(‘python.exe’, ‘python’) zfile.close() file = zipfile.ZipFile(‘python_code.zip’) file.namelist() |
왕 초보를 위한 파이썬
책 정보
- 출판사 : 아타오(www.atio.co.kr)
- 출판년도 : 2017년7월10일(초판)
- 예제 코드 : https://gitlab.com/dave_code/python_book_for_beginner
저자 정보
- 저자 : Dave Lee
- 저자 관련 사이트 : www.funcoding.xyz
- 유효하지 안은 링크 임.
1장. 컴퓨터를 이해하자
- 가장인기 있는 프로그래밍 언어 관련 사이트
2장. 바로 프로그래밍을 시작해보자
- Web Python Editor
- 아나콘다(Anacodnda)
- 다운로드 사이트 : https://www.anaconda.com/download/
- 관련 설명
연습 문제
3장. 파이썬 주요 사용법을 배워보자
- PyCharm
- 파일내용 수정 자동 저장
3장 연습문제 연습문제 1. 자판기 프로그램 일부를 만들어보자. 자판기가 어떤 음료수를 파는지 알고 싶어서 팔고 있는 음료수 이름을 각 라인마다 모두 출력하는 코드를 작성해 보자. 사전 데이터는 아래와 같다. drink_data = {'코카콜라': 1000, '서울우유': 1500, '오렌지쥬스': 2000, '삼다수': 900, '칠성사이다': 1000 } 연습문제 2. 자판기가 파는 음료수 이름을 출력해 준 다음, 음료수 이름을 입력하면 음료수 가격을 출력하는 프로그램을 만들어보자. 사전 데이터는 다음과 같다. drink_data = {'코카콜라': 1000, '서울우유': 1500, '오렌지쥬스': 2000, '삼다수': 900, '칠성사이다': 1000 } 연습문제 3. 지역별 인구는 다음과 같다 '서울': 9860, '부산': 3400, '대구': 2455, '인천': 2886, '광주': 1517, '대전': 1536, '울산': 1142, '세종': 197, '경기': 12398, '강원': 1506, '충북': 1561, '충남': 2089, '전북': 1798, '전남': 1757, '경북': 2642, '경남': 3285, 지역별 인구를 리스트 변수에 넣고 전체 총 인구와 평균 인구를 출력하는 프로그램을 만들자. 지역별 인구를 사전 변수에 넣고 수도권(서울, 인천, 경기) 인구 합과 평균을 출력하는 프로그램을 만들자. 제주 인구를 587이다. 해당 데이터를 사전 변수에 추가하고 전체 인구 합과 평균을 다시 출력해 보자. 서울 인구가 10,200 인천 인구가 3,200 으로 늘고 경구 인구가 10,300으로 줄었다. 사전 데이터를 업데이트하고 전체 인구 합과 평균을 다시 출력해 보자. 연습문제 4. 리스트 데이터로 세 개의 임의 숫자가 주어지면 해당 데이터를 숫자가 낮은 순서대로 정렬하는 프로그램을 만들어보자. 리스트 변수는 정렬을 간단히 하는 리스트 변수.sort() 함수가 있지만, 이번 연습 문제에서는 해당 함수를 사용하지 않고 조건문과 반복문, 리스트 변수를 활용하여 작성해 보자. |
4장. 프로그램을 스스로 만들어보자
- ㅌ
5장. 객체 지향 이해하기
- ㅌ
6장. 라이브러리를 활용한 프로그램 만들기
- ㅌ
7장. 인공지능 프로그램밍
- ㅌ
파이썬(Python) 프로그래밍
강좌 정보
- Tacademy (강좌는 IE로 듣기것이 좋다)
- 2017년
강사 정보
- 신호철 (15강)
1강 파이썬 개요 및 설치
파이썬 이란
- 1991년 Guido van Rossum(귀도 반 로썸)이 발표
- startup에서 많이 사용함. web < 임베디드 많이 사용
파이썬 특징
- 가독성 : 코드 블록을 들여쓰기로 구분
- 풍부한 라이브러리
- 접착성
- 쉽게 라이브러리 추가
- C로 구현된 부분을 쉽게 사용 그 반대로도 쉽게
- 무료 : 무료와 다름없는 Python Sw Foundation 라이센스
- 유니코드
- 동적타이핑
- 런타임 타입 체크 (동적 타이핑 지원)
- 메모리 자동 관리
파이썬 종류
- Cpython - C로 짜여진 파이썬
- Jython - Java
- IronPython - 닷넷
- PyPy - 파이파이는 파이썬으로 작성된 파이썬 인터프리터
파이썬을 사용하는 프로젝트들
- BitTorrent, MoinMon, Scons, Trac, Yum
- CherryPy, Django
- GIMP, Maya, Paint Shop Pro
- Youtube.com, Google Maps, Gmail
2.x와 3.x 의 차이
- print 함수
- 2.x style
print “hello world” |
- 3.x style
print(“hello world”) |
- long 자료형 대신 int로 통일
- 2.x style
type(2**31) <type ‘long’> |
- 3.x style
type(2**31) <type ‘int’> |
- ‘int/int’의 결과가 float으로 처리
- 2.x style
>>> 3/2 1 |
- 3.x style
>>> 3/2 1.5 |
- String , unicode 체계 변경
- 2.x style
>>> type(‘가’) <type ‘str’> >>> type(u’가’) <type ‘unicode’> |
- 3.x style
>>> type(‘가’) <type ‘str’> >>> type(’가’.encode(‘cp949’)) <type ‘bytes’> |
- raw_input , input
- 3.x 에서는 raw_input이 input으로 통합됨.
파이썬의 문법
- 소스코드 인코딩
- 기본 ascii
- #주석으로 인식
- 지정 방법
# coding:latin-1 # -*- coding:utf-8 -*- |
- 기타
- 한줄에 여러 구문 사용 시 : 세미콜론(;) 사용
파이썬 2 를 파이썬 3으로 변경하기
- 변환 도구
- /Tools/script/2to3.py -w test.py
2강 자료형 및 연산자
자료형의 종류 및 사용법
- int , float
- complex : 복소수 (공부) -> 개념 공부 하자
- 연산자 : // , **(제곱근)
문자열
- “”, ‘’, “”” 줄바꿈도 적용됨 “””
- + : 결합 (단 문자열인 경우만)
- * : 반복
- Indexing 및 slicing
- 인텍싱 (특이함 - 기억 할것) - python : 012345
- ‘python’[0] = [-6] -> p
- ‘python’[5] = [-1] -> n
- ‘python’[3:5] -> ho
- ‘python’[4:] = [4:6] -> on
- ‘python’[-1:] -> n : 끝에서 -1 에서 끝가지
- ‘python’[-6:] -> python
- ‘python’[-6] -> p
- 유니코드 임
- encode(‘문자셋(utf-8)’)
- Escape 문자
- \n - 개행, \t - 탭 , \r - 캐리지 리턴
- \0 - 널 , \\ - 문자 \
- \’ , \”
- + 연산자는 , 상수의 연결일 경우 생략 가능
- >>>’py’ ‘thon’
‘python’
List
- 자바에 리스트와 비슷함
- 함수들
- append(<요소>) : 마지막에 추가
- insert(index,<요소>) : 특정 위치에
- extend(<리스트>) : 리스트에 리스트 추가함
- <리스트>+<리스트> : 리스트 끼리 결합 (새로 결합된 리스트를 반환)
- index(<요소>[,s,e]) : 위치 찾기 , n - 시작 , e - 마지막 이전
- count(<요소>) : 요소 개수를 파악하기
- pop : 마지막 요소를 꺼내고 제거 한다.
- remove(<요소>) : 요소 제거
Set
- 집합
- 순서가 없음.
- 집합 연산을 제공
- 교집합 : intersection
- 합집합 : union
- 차집합
Tuple (역할에 대해서 연구 필요함)
- 리스트와 비슷하지만 읽기 전용임.
- 속도가 빠름
- 제공되는 메소드 : count , index
- swap예제를 빠르게 변환 가능 함.
>>> a, b = 1, 2 >>> print(a, b) 1 2 >>> a, b = b, a |
Dictionary
- 키와 쌍
- 메소드(조회)
- items() , keys(), values()
- items() 이용한 조회
>>> for k, v in colors.items() |
- 삭제
- del <사전변수>[‘<key>’]: 한 개
- clear() : 전체
Bool
- True , False
- and(&), or(|) , not
얕은 복사 vs 깊은 복사
- 얕은 복사 : 주소 값만. id() 값이 동일
- 깊은 복사 : 새롭게 생성 한다. id() 값이 다름.
3강 함수
함수의 정의
- def로 시작하고 콜론(:)으로 끝남
- 함수도 객체임, 레퍼런스가 생성
- tuple을 사용하여 여러값을 묶어서 반환 가능함.
- return를 반환하지 않으면 None이 반환됨.
파이썬 함수에 인수 전달
- 레퍼런스 전달
- 변수 타입에 따라 다르게 처리
- 변경 가능 변수(mutable)
- 불가능 변수(immutable)
스코핑 룰
- 이름 공간 (Name space)
- 지역 영역(Local scope) : 함수 내부의 이름 공간
- 전역 영역(Global scope) : 함수의 밖의 영역
- 내장 영역(Built-in scope) : 파이썬 자체에서 정의한 내용
- LGB 규칙 : 변수 이름을 찾을 때
- Local -> Global -> Built-in
파이썬 인수 모드
- 기본 인수 값
- 인수를 지정해 주지 않아도 기본 값이 할당 되도록 하는 방법
- (a = 10, b = 20)
- 키워드 인수
- 인수 이름으로 값을 전달
- 순서가 변경 될 수 있음.
- 가변인수 리스트
- 인수의 개수가 정해지지 않는 가변 인수를 전달
- * 를 사용하며 인수는 tuple 형식으로 전달
- def union2(*ar)
- 정의되지 않는 인수 처리하기
- ** 를 사용하면 정의되지 않는 인수를 dictionary 형식으로 전달
람다(lambda) 함수
- 이름이 없는 1줄 짜리 함수
- lambda 인수 : <구문>
- 한 줄의 간단한 함수가 필요한 경우
- 프로그램의 가독성을 위해서
- 함수를 인수로 넘겨 줄 때
- 예
>>> g = lambda x,y : x * y >>> g(2,3) 6 >>> (lambda x: x * x)(3) 9 |
재귀적 함수 호출
- 함수 내부에서 자기 자신을 계속 호출하는 방법
pass 구문
- 아무 일도 하지 않음
- 아무것도 하지 않는 함수,모듈, 클래스를 만들어야 할 경우에 사용함
__doc__ 속성과 help 함수
- help(<함수명>) : 도움말 보기
- 사용자가 작성하는 함수도 help를 사용 할 수 있음.
- <함수명>.__doc__ = “도움말” 추가 가능
- 예
def center(x,y): |
Iterator(이터레이터)
- 순환 가능한 객체의 요소를 순서대로 접근할 수 있는 객체
- 내부 반복문을 관리하는 주는 객체
- 이터레이터 안의 __next__()를 이용해 순회 가능한 객체의 요소를 하나씩 접근할 수 있음.
- 예
>>> s = 'abc' |
Generator(제너레이터)
- return 대신 yield라는 구문을 이용해 함수 객체를 유지한 체 값을 호출자에 넘겨줌
- 값을 넘겨준 후 함수 객체는 그대로 유지
- 함수의 상태를 그대로 유지 하고 다시 호출할 수 있기 때문에 순환 가능한 객체를 만들 때
매우 편리함 - ** 추가 공부 필요함.
4강 제어
if문
if <조건식>: |
파이썬 조건식 표현 방법
- 70 <= score < 80
- grade >= 70 and grade < 80
조건식의 참/거짓 판단
- False
- 0, 0.0 , (), [], {}, ‘’(빈문자열), None
- True
- False 제외한 모든 경우
and / or
- 왼쪽 -> 오른쪽
- and , &
- or , |
- 단축평가 : 조건식 전체를 파악하지 않고 일부만 판단하는 것
- and , or
- run time error 가 발생되지 않는다. - 속도 향상
while문
- while <조건식>:
[tab]<구문>
for문
- for <아이템> in <시퀀스형 객체S>:
[tab]<구문> - continue: 시작 지점으로 이동
- break: 루프를 종료함.
- else: break를 만나서 종료되지 않고 끝까지 수행되는 경우이 수행됨.
리스트 내장
- [<표현식> for <아이템> in <시퀀스 객체> (if <조건식>)]
- 예1
- l = [1,2,3]
- [i ** 2 for i in l]
- [2 , 4 , 9 ]
- 예2 - 조건이 존재함.
- [i for i in t if len(i) > 5]
- 예3 - 원본리스트 2개 인 경우
- [x * y for x in L1 for y in L2]
제어문 관련 유용 함수
- filter(<function>|None, 시퀸스 객체)
- 함수의 결과가 참인 시퀸스 객체의 iterator를 반환
- None이 오는 경우 필터링 x
- 예)
list(filter(lambda i: i>20, L))
- range([‘시작값’],’종료값’,[‘증가값’])
- 수열을 순회하는 이터레이터 객체를 반환
- 시작값과 증가값 생략시 0, 1로 설정됨.
- map(<function>, 시퀀스 객체, …)
- 시퀸스객체를 순회하면서 function의 연산을 수행
5강 클래스
정의
- 데이터와 데이터를 변형하는 함수를 같은 공간으로 작성
- Method
- Instance
- Information Hiding
- Absraction
파이썬 클래스 특징
- 가변적인 멤버 변수 가능 함.
- 기본적으로 선언된 변수를 public 임.
- self(변경가능) 라는 this(자바)를 명시적으로 선언되어야 한다.
- 호출시는 생략될 수 있다.
클래스와 인스턴스 이름 공간
- 검색 순서
- 인스턴스 객체 영역 -> 클래스 객체 영역 -> 전역 영역
클래스와 인스턴스 관계
- isinstance(<인스턴스객체>, <클래스 객체>)
- 인스턴스 객체가 어떤 클래스로 부터 생성되었는지 확인
- bool 형태 값으로 반환
- object 클래스는 모든 클래스의 최상위 클래스
생성자와 소멸자
- 생성자 : __init__()
- 생성시 초기화 작업을 수행
- 인스턴스 객체가 생성될 때 자동으로 호출
- 소멸자 : __del__()
- 소명시 종료 작업을 수행
- 인스턴스 객체의 참조 카운터가 0이 될 때 호출
메서드 확장 (심화 학습 필요✪)
- 정적(static) 메소드
- 클래스를 통해 직접 호출할 수 있는 메소드
- 인스턴스 객체를 참조하는 self 인자가 필요하지 않음.
- 형식 : <호출할 메소드 이름>=staticmethod(클래스내 정의한 메소드 이름)
- 클래스(class) 메소드
- 클래스 영역의 데이터에 직접 접근할 수 있는 메소드
- 암시적으로 첫 인자로 클래스 객체(self)가 전달
- 형식 : <호출할 메소드 이름>=classmethod(클래스내 정의한 메소드 이름)
연산자 중복
- 사용자 정의 객체에서 필요한 연산자를 내장 타입과 형태와 동작이 유사하도록 재정의
- 연산자 중복을 위하여 두 개의 밑줄 문자가 앞뒤로 있는 메소드를 미리 정의 함.
수치 연산자
method | operator | example |
__add__(self, other) | +(이항) | A+B, A+=B |
__sub__(self, other) | -(이항) | A-B, A-=B |
__mul__(self, other) | * | A*B, A*=B |
__truediv__(self, other) | / | A/B, A/=B - 3.x 이상에서 지원 - 2.x __div__ |
__floordiv__(self, other) | // | A//B, A//=B |
__mod__(self, other) | % | A%B, A%=B |
__divmod__(self, other) | divmod() | divmod(A, B) |
__pow__(self, other[,modulo]) | pow(), ** | pow(A, B), A**B |
__ishift__(self,other) | << | A<<B, A<<=B |
상속
- 부모 클래스의 모든 속성을 물려줌
- 형식 : class 클래스명(부모클래스명):
- 클래스 간의 관계 확인
- issubclass(자식, 부모)
다중 상속
- 2개의 이상의 클래스를 상속 받음
- 두 클래스의 모든 속성을 전달 받음
- 형식 : class 클래스명(부모클래스1,부모클래스2 ):
6강 모듈
모듈 - 자바의 패키지 라이브러리 같은 것
- 3.x 에서는 200개 넘는 모듈을 지원
- 사용하는 이유
- 코드의 재 사용
- 코드를 이름공간으로 구분하고 관리함.
- 복잡하고 어려운 기능을 포함하는 프로그램를 간단하게 만들 수 있음.
모듈 사용하기
- import <모듈명>
- 모듈의 현재 이름 공간으로 가져오는 역할을 수행
- dir() : 모듈의 함수 혹은 데이터가 들어 있는 알 수 있음.
- help() : 모듈에 대한 설명
모듈의 경로
- 모듈을 import 했을 대 모듈의 위치를 검색하는 경로
- sys.path에 저장되어 있는 디렉토리를 검색
- 모듈 경로 탐색 순서
- 프로그램이 실행된 디렉토리
- PYTHONPATH 환경 변수에 등록된 위치
- 표준 라이브러리 디렉토리
모듈 임포트
- 모듈의 안의 attribue(function, data)들을 사용하기 위해
- import 구문은 어디서나 사용가능
- 함수, 제어문 내부에서도 import 할수 있음.
- import <모듈이름>
- 기본적인 임포트 방법
- 모듈명.attribute이름 형식으로 사용할 수 있음.
모듈 임포트 방법
- from <모듈> imprt <어트리뷰트>
- 모듈명 생략하고 사용 가능
- from <모듈> import *
- import <모듈> as <별칭>
모듈 임포트 파헤치기
- 임포트를 할 때, 해당 모듈의 바이트 코드가 있으면 이를 임포트 함
- 모듈을 임포트하면 해당 모듈의 코드가 실행
- 모듈이 임포트 되면 메모리에 모듈 코드가 로딩되면 프로그램이나 파이썬 인터프리터가 끝나기 전까지 변경되지 않음.
바이트 코드
- 일종의 중간 파일
- 모듈의 임포트를 빠르게 해주는 역할
- 바이트코드가 존재하면 인터프리팅을 하지 않고 바로 해당 모듈을 로딩함.
유용한 팁
- 모듈이 직접 실행 인지 다른 곳에서 임포트 되었는지를 구분해 줄 수 있는 __name__ 어트리뷰트
- __name__ 값이 모듈 자신의 이름 : 모듈이 임포트 됨.
- __name__ 값이 ‘__main__’이면 : 모듈이 직접 실행 됨.
패키지
- 모듈의 모음
- 파이썬의 모듈 이름 공간을 구조화 하는 한 방법
- __init__.py 역할 : ** 좀더 공부
7강 예외 처리
Exception(예외)란
- 프로그램의 제어흐름을 조정하기 위해 사용하는 이벤트
- 처리 하지 않는 예외는 대하여 자동으로 Error가 발생하고 프로그램을 종료
- 처리되지 않는 예외(Unhandled Exception)
- 0으로 나누는 경우
- 원격 DB 접속시 연결되지 않을 때
- 파일 열었을 때 사용자가 파일을 삭제한 경우
구문 에러
- 오타, 들여쓰기 실수
- 개발자에게 알려 주는 역할 (Syntax Error)
예외의 종류
- NameError
- 선언하지 않는 변수에 접근
- ZeroDivisionError
- 0으로 나눔
- IndexError
- 리스트 접근 시 범위를 인텍스를 사용
- TypeError
- 지원하지 않는 연산을 수행(정수를 문자열로 나눔)
내장 예외 클래스 계층구조
- 미리 정의 해둔 예외
- 프로그램 동작 중 자동적으로 발생
- 명시적으로 예외 발생도 가능
주요 내장 예외
- Exception
- 모든 내장 예외의 기본 클래스
- 사용자 정의 예외를 작성시 활용
- ArithmeticError
- 수치 연산 예외의 기본 클래스
- LookupError
- 시퀀스 관련 예외의 기본 클래스
- EnvironmentErrror
- 파이썬 외부 에러의 기본 클래스
- 참고 자료
- 파이썬 공식 자료, Built-in Exceptions 부분
예외 처리 구문
try: [tab]<예외 발생 가능성이 있는 문장> except <예외1>: [tab]<예외 처리 문장> except <예외2, 예외3>: [tab]<예외 처리 문장> except <예외4> as 인자: [tab]<예외 처리 문장> else: [tab]<예외가 발생되지 않는 경우, 수행할 문장> finally: [tab]<예외 발생 유무에 상관 없이 수행할 문장> |
raise 구문
- 명시적으로 예외 발생
- 형식
- raise [Exception]
- raise [Exception(data)]
- raise
사용자 정의 예외
- 내장 예외만으로 부족한 경우, 개발자 직접 예외를 정의하여 사용함
- Exception 클래스나 그 하위 클래스를 상속하여 구현
assert 구문
- 표현식 : assert <조건식>,<관련 데이터>
- 인자로 받은 조건식이 거짓인 경우, AssertionError가 발생
- 개발과정에 디버깅, 제약 사항 설정등으로 사용
- __debug__가 Ture인 경우만 assert 구문 활성화
- 명령 프로프트에서 최적화 옵션(-O)를 설정하면 __debug__는 False로 설정됨.
- 아래 코드와 동일
if __debug__: [tab]if not <조건식>: [tab][tab]raise AssertionError(<관련데이터>) |
8강 입출력
출력 (3.x 기준)
- 함수 입력 인자로 sep(구분자),end(끝글자), file(출력지정)
- sep = ‘ ’(기본값)
- end = ‘\n’(기본값)
- file= sys.stdout(기본값)
- sys.stderr - 표준 오류
- 지젤 파일로 지정 가능
Formatting
- format()를 사용하여 좀더 자유로운 출력이 가능 함
- 문자열 내에서 {}를 이용하여 인자를 출력함.
- {index} , index값을 이용하여 순서를 결정 함.
- 형식 - index 사용시
{0} - 첫번째 인자 ,Apple {1} - 두번째 인자 ,iPhone >>> print(“{0}은 {1}의 제조사다”.format(“Apple”,”iPhone”)) Apple은 iPhone의 제조사다 |
- 형식 - 키
# key 사용시 >>> print(“{brand}은 {product}의 제조사다”.format(brand=”Apple”,product=”iPhone”)) Apple은 iPhone의 제조사다 |
- 형식 - 사전
# dictionary >>> dic = {‘brand’:’Apple’, ‘product’:’iPhone’} >>> print(“{0[brand]}은 {0[product]}의 제조사다”.format(dic)) Apple은 iPhone의 제조사다 |
- ** 사용
- ** 기호를 사용하면 dictionary를 입력 받은 것을 판단하고 인자를 하나만 받게 됨.
- 불필요한 index 생략 가능
# ** dic >>> dic = {‘brand’:’Apple’, ‘product’:’iPhone’} >>> print(“{brand}은 {product}의 제조사다”.format(**dic)) Apple은 iPhone의 제조사다 |
- !기호를 사용해서 문자열 변환을 사용
- 사용예
>>> dic = {‘brand’:’Apple’, ‘product’:’iPhone’} # !s - str() >>> print(“{brand!s}은 {product!s}의 제조사다”.format(**dic)) Apple은 iPhone의 제조사다 # !r - repr() --> 객체를 문장열로 출력 한다. >>> print(“{brand!r}은 {product!s}의 제조사다”.format(**dic)) Apple은 iPhone의 제조사다 # !a - ascii() >>> print(“{brand!a}은 {product!a}의 제조사다”.format(**dic)) Apple은 iPhone의 제조사다 |
- “:” 기호를 이용하여 좀더 정교하게 정렬, 폭, 부호, 공백처리, 소수점, 타입들 지정 가능
- 정렬
- > : 오른쪽 , < : 왼쪽 , ^ : 가운데 , = : 부호화 상관이 있음.
- 부호 표시하기
- + : 플러스 부호를 나타내라는 뜻
- - : 마이너스 값만 마이너스 부호를 나타내라는 뜻
- “ “ : 마이너스에서는 표시 , 플러스는 공백을 표시
- 진수를 변경하여 출력
- b : 이진수, d : 십진수, x : 16진수, o : 8진수, c : 문자열
- #를 사용하면 #x - 16진수 , #o - 8진수 , #b - 2진수
- 실수에 대한 변환
- e - 지수표현, f - 일반적인 실수 , % - 퍼센트 표현
- 실수 표현법
- 소수점 몇 번째 자리 표현할지 지정
# $ -빈칸은 $ 채움, > - 오른쪽 정렬 , 5 - 폭 |
입력
- input() 함수를 이용함.
- input(“prompt”) 줄 수도 있음.
- 결과값은 문자열 객체를 반환 함.
파일 입출력 open
- 기본형 : 파일객체 = open(file ,mode)
- mode 속성들
- r : 읽기 전용 (기본값)
- w : 쓰기
- a : 쓰기 + 이어쓰기
- + : 읽기 + 쓰기
- b : 바이너리
- t : 텍스트 (기본값)
파일 입출력 read, write, close
- read() : 데이터 읽기
- write() : 데이터 쓰기
- close() : 파일 닫기
- 예제
>>> f = open('test.txt','w') |
- 텍스트모드에서는 인코딩이 적용됨으로 바이너리 데이터 처리시 오류가 발생함
- 바이너리 데이터는 바이너리 모드를 사용해야 함.
파일 입출력 - readline, readlines, tell , seek
- readline() : 호출할 때 마다 한 줄씩 읽어 문자열로 반환함.
- readlines() : 파일 전체를 읽어서 줄로 구분된 리스트를 반환함.
- tell() : 현재 파일에서 어디까지 읽고 썼는지 위치를 반환함.
- seek() : 사용자가 원하는 위치로 포인터를 이동함
with ~ as 구문
- with open(파이명) as 파일객체:
<tab>처리문장
pickle 모듈
- 문자열을 제외 객체를 저장할 때 유용함
- dump() : 쓰기 함수
- load() : 읽기 , 바이너리 모드 **
- 사용자 정의 클래스도 가능
- 사용예
>>> colors = [‘red’,’green’,’blue’] >>> import pickle # 쓰기 >>> f = open(‘colors’,’wb’) >>> pickle.dump(colors, f) >>> f.close() # 읽기 >>> del colors # 기존 객체 삭제 >>> f = open(‘colors’,’rb’) >>> colors = pickle.load(f) ; f.close() >>> colors # 출력 |
9강 문자열 다루기
문자열 함수 - capitalize()
- 문장의 첫글자만 대문자로 변환
- “PYTHON”.capitalize()
>> “Python”
문자열 함수 - count(keyword, [start, [end]])
- 주어진 keyword를 문자열에서 센다
문자열 함수 - encode([encoding,[errors]])
- 주어진 encoding으로 변환 한다.
- errors - 에러 처리 방법을 설정 한다.
- strict - 오류를 발생 시키고 종료
- ignore - 오류 문자를 무시하고 출력함.
- replace - 오류 문자를 ? 으로 변환 함.
- xmlcharrefreplace - xml 형식
- backslashreplace - \uxxxx 형식
문자열 함수 - endswith(postfix, [start, [end]])
- 특정 문자열 끝나는 문자열를 찾는다.
- 반환값은 - 찾으면 : True, 아니면 : False
문자열 함수 - expandtabs([tabsize])
- tab을 공백으로 변환 함.
find 와 index의 차이는 무엇일까?
- 동작 방식은 동일 하지만 찾지 못할 경우 ValueError를 발생 시킴
- isalnum() - 알파벳과 0-9 숫자 일 때 True를 반환
- isalpha() - 알파벳으로 구성된 문자열 여부
- islower() - 소문자로 구성된 문자열 여부, 단 알파벳만 따진다.
- isupper() - 대문자로 구성된 문자열 여부, 단 알파벳만 따진다.
- isspace() - white 스페이스(탭, 개행, 스페이스)로 구성되어 있으면 True
- istitle() - 제목문자열 형식이면 True
- isdecimal(), isdigit() - 숫자 형식이면 True
- isnumeric() - 모든 숫자형(분수도)도 포함된 형식이면 True
- join(sequence) - 주어진 문자열로 시퀸스를 결합하여 하나의 문자열을 만든다.
- lower() - 소문자로 변환
- rstrip([chars]) - 오른쪽 부터 주어진 문자들을 포함한 문자를 제거 한다.
- reverse : 역순 의미
- lstrip([chars]) - 왼쪽 부터 주어진 문자들을 포함한 문자를 제거 한다.
- maketrans(x,[y,[z]]) - 함수 이해 되지 않음.
- partition(separator) - 주어진 문자열 기준으로 나눈다.
- replace(old, new, [count]) - old -> new 로 주어진 count 만큼 변환 하면 count가 주어지지 않으면 계속 변환 한다.
- rfind(keyword, [start, [end]]) - keyword 해당하는 문자열을 오른쪽 부터 찾는다.
- reverse : 역순 의미
- 찾지 못하면 -1 을 반환
- rindex(keyword, [start, [end]]) - keyword 해당하는 문자열을 오른쪽 부터 찾는다.
- reverse : 역순 의미
- 찾지 못하면 ValueError를 발생 시킴
- rpartition(separator) - 주어진 문자열 기준으로 오른쪽으로 부터 나눈다.
- rsplit(separator, [maxsplit]) - 주어진 구분자로 나눈다.
- split([separator, [maxsplit]]) - 주어진 구분자로 나눈다.
- splitlines([keep]) - 주어진 문자열 행을 행구분자로 나눈다.
- keep 가 True 이면 행구분자를 버리지 않는다.
- startswith(prefix, [start,[end]]) - 특정 문자열로 시작되는지 알아 본다.
- strip([char]) - 화이트 스페이스를 문자열 시작과 끝에서 제거 한다.
- swapcase() - 대소문자를 서로 변환 한다.
- title() - 문자열 제목화 한다.
- upper() - 모든 문자열을 대문자로 변환 함.
정규식을 좀더 공부 하자
정규표현식 문법
문법 | 의미 |
. | 개해 문자를 제외한 1자를 의미 |
^ | 문자열의 시작 |
$ | 문자열의 종료 |
[] | 문자의 집합 |
| | OR |
() | 괄호 안의 정규식을 그룹으로 만듦 |
* | 문자가 0회 이상 반복 |
+ | 문자가 1회 이상 반복 |
? | 문자가 0혹은 1회 반복 |
{m} | 문자가 m회 반복 |
{m,n} | 문자가 m회 부터 n회까지 반복되는 모든 경우 |
{m,} | 문자가 m회 부터 무한 반복되는 모든 경우 |
Escape 문자열
종류 | 설명 |
\w | 밑줄과 표현 가능한 문자 |
\W | 밑줄과 표현 가능한 문자를 제외한 나머지 문자 |
\d | 0-9를 포함하는 모든 숫자 |
\D | 숫자를 제외한 모든 문자 |
\s | 공백 문자 |
\S | 공백 문자를 제외한 모든 문자 |
\\ | 역슬래쉬 문자 자체를 의미 |
re 모듈
- search(pattern, string[, flag])
- string 전체애 대해서 pattern이 존재하는지 검사하여 MathObject 인스턴스를 반환
- match(pattern, string[, flag])
- string 시작부분부터 pattern이 존재하는지 검사하여 MathObject 인스턴스를 반환
- split(pattern, string[, maxsplit=0])
- pattern을 구분자로 string을 분리하여 리스트로 반환함
- findall(pattern, string[, flag])
- string에서 pattern과 매치되는 모든 경우를 찾아 리스트로 반환
- sub(pattern, repl, string[, count])
- string에서 pattern과 일치하는 부분에 대해서 repl로 교체하여 결과 문자열을 반환
10강 날짜 다루기
시간(time) 모듈
struct_time 시퀀스 객체 (속성) , unix_c 의 struct tm과 비슷함.(링크)
- tm_year : 년도
- tm_mon : 월(1-12)
- tm_mday : 일(1-31)
- tm_hour : 시(0-23)
- tm_min : 분(0-59)
- tm_sec : 초(0-61), 61는 윤초를 위해서
- tm_wday : 요일(0-6), 0은 월요일(c,java 에서는 일요일)
- tm_yday : 일(1-366)
- tm_isdst: 서머타입(1 - 적용, 0 - 미적용, -1 - 알수없음)
time 모듈 함수
- time.time()
- 설명 : 1970년 1월 1일 자정 이후로 누적된 초를 float 단위로 반환
- time.sleep(secs)
- 설명 : 현재 동작 중인 프로세스를 주어진 초만큼 정리
- time.gmtime([secs])
- 설명 : 입력된 초를 변환하여, UTC기준의 struct_time 시퀀스 객체로 반환
- time.localtime([secs])
- 설명 : 입력된 초를 변환하여, 지방표준시 기준의 struct_time 시퀀스 객체를 반환
- time.asctime([t])
- 설명 : struct_time 시퀀스 객체를 인자로 받아서 문자열 형태로 반환
- 출력 형식 : ‘Sun May 15 18:29:30 2009’
- ‘<요일> <월> <일> <시>:<분>:<초> <년도>’
- time.mktime(t)
- 설명 : 지방표준시인 struct_time 시퀀스 객체를 인자로 받아서 time()과 같은 누적된 초를 반환
time 모듈 함수 - 출력 형식 지정
- time.strftime(format[, t])
- 설명 : 주어진(혹은 생략된) struct_time 정보를 format 형식으로 문자열를 생성한다.
- 예) strftime(“%Y-%m-%d %I:%M”, localtime())
- '2019-01-11 08:19'
- time.strptime(string[, format)
- 설명 : 주어진 문자열 파싱해서 struct_time 정보를 객체를 반환 한다.
- 형식 표시자
- %y - 연도를 축약해 표시 2019 : 19
- %Y - 연도를 축약하지 않고 표시 2019
- %b - 축약된 월 이름 (DEC)
- %B - 축약되지 않은 월 이름
- %m - 숫자로 표시하는 월 (01~12)
- %d - 일(01 ~ 31)
- %H - 24시를 기준으로 한 시(00~23)
- %I - 12시를 기준으로 한 시(01~12)
- %M - 분(00~59)
- %S - 초(00~61)
- %p - AM/PM
- %a - 축약된 요일 이름
- %A - 축약되지 않은 요일 이름
- %w - 요일을 숫자로 표시
- %j - 1월 1일 부터 누적된 날짜 (001~366)
datetime 모듈이란
- 기념일과 같은 날짜, 시간 연산을 위하여 사용
- datetime 주요 클래스
- date - 일반적으로 사용되는 그레고리안 달력[a]의 년, 월, 일을 표현
- time - 시간을 시, 분, 초, 마이크로초, 시간대(Time zone)으로 표현
- datetime - date 클래스와 time 클래스의 조합으로 구성
- timedelta - 두 날짜 혹은 시간 사이의 기간을 표현
date 클래스
- 생성자 : datetime.date(year, month, day)
- 입력인자의 조건
- datetime.MINYEAR(1) <= year <= datetime.MAXYEAR(99999)
- 1 <= month <= 12
- 1 <= day <= 해당 월의 날짜
time 클래스
- 시, 분, 초와 같은 시간을 표시
- 생성자 : datetime.time(hour,[ minute[, second[, microsecond[, tzinfo]]]])
- 시간정보들을 받아서 time 객체를 생성함
timedelta 클래스
- 두 날짜 혹은 시간 사이의 기간을 표현함
- 생성자 : timedelta([days[, seconds[, microseconds[, millisecodns[, minute[, hours[, weeks]]]]]])
datetime 클래스
- date 클래스 + time 클래스
11강 숫자 다루기
내장함수 : import 없이 사용가능
- sum(iterable[, start]) : 순회 가능한 객체의 총 합계를 반환
- max(iterable) : 순회 가능한 객체의 최대값
- min(iterable) : 순회 가능한 객체의 최소값
- abs(x) : 절대값
- pow(x, y[, z]) : x^y 값을 반환
- round(x[, n]) : x의 반올리 결과를 반환
- divmod(a, b) : ‘a/b’의 몫과 나머지를 튜플 형태로 반환
math(수학) 모듈
- math.ceil(x) : 올림, N >= x 를 만족하는 가장 작은 정수 N을 반환
- math.floor(x) : 내림, N <= x 를 만족하는 가장 큰 정수 N을 반환
- math,trunc(x) : x의 정수 부분만을 반환
- math.copysign(x, y) : y의 부호만 x에 복사하여 반환
- math.fabs(x) : x의 절대값을 반환
- math.factorial(x) : x의 계승 값을 반환
- math.fmod(x, y) : 나머지 연산을 수행
- math.fsum(iterable) : 합계를 반환
- math.modf(x) : 입력받은 x의 순수 소수부분과 정수부분으로 분리하여 튜플을 반환
지수, 로그 함수
- math.pow(x, y) : x^y 결과를 반환
- math.sqrt(x) : x의 제곱근한 결과를 반환
- math.exp(x) : ex 의 결과를 반환
- math.log(x[, base]) : 밑을 base로 하는 log X의 결과를 반환
삼각함수 연산
- math.degrees(x) : Radian -> 60분법으로 변환
- math.radians(x) : 60분번 -> Radian 변환
- math.sin(x) , math.cos(x) , math.tan(x)
- math.asin(x) , math.acos(x) , math.atan(x)
- math.sinh(x) , math.cosh(x) , math.tanh(x)
- math.asinh(x), math.acosh(x), math.atanh(x)
분수(fractions) 모듈
- 유리수와 관련된 연산을 효율적으로 처리할 수 있는 분수 모듈
- Fraction 클래스의 생성자
- fractions.Fraction(분자=0, 분모=1)
- fractions.Fraction(Faction 객체)
- fractions.Fraction(문자열)
- 지원 메소드
- Fraction.from_float(f) : 실수값으로 Fraction 생성
- f.__floor__()
십진법(decimal) 모듈
- 정수 - 고정 소수점 방식
- 실수 - 부동 소수점 방식
- 부호 , 지수부 , 기수부
- 부동 소수점 문제 : 실수 표현의 문제 및 결합법칙시 오류가 발생함.
- 이 이유 때문에 십집법 모듈이 나옮
- 생성자
- decimal.Decimal([value[, context])
- 연산 : + , - , * , / , ** 가능함.
- 내장 함수 : max, min, sum 에서 사용가능
Random 모듈
- random.seed([x]) : 임의 숫자 생성기의 초기화 작업을 함.
- random.random() : 0.0 <= F <.0 사이의 임의의 float 숫자를 반환
- random.uniform(a, b) : 인자로 받은 두 값 사이의 임의의 float 숫자를 반환
- random.gauss(m, sb) : 가우스 분포의 난수를 반환
- random.randrange([start], stop[,step]) :
- random.randint(a, b) : a <= N <= b 인 임의의 정수 N을 반환
- random.choice(seq) : 입력받은 시퀀스 객체의 임의의 아이템을 반환
- random.shuffle(x[, random]) : 입력받은 시퀀스 객체를 섞음.
math.fmod 와 % 연산자의 차이
- 부동소수 일때는 정확도의 차이가 존재함
- math.fmod를 권장
- 양의 정수일때는 % 나 math.fmod 값이 동일하다.
- 음의 정수일대는 서로 다르므로 math.fmod를 권장함.
[random.randrange(20) for i in range(10)]
- 중복된 수가 올 수 있는 난수 목록
random.sample(range(20),10)
- 중복된 수가 오지 않는 난수 목록
12강 파일시스템
os.path
- os.path.abspath(path) : 절대 경로를 반환
- os.path.basename(path) : 입력받은 경로의 기본이름을 반환
- os.path.dirname(path) : 입력받은 파일/디렉토리의 경로를 반환
- os.path.exists(path) : 입력받은 경로가 존재하면 True를 반환하고, 존재하지 않는 경우에는 False를 반환
- os.path.expanduser(path) : 입력받은 경로안의 ~를 현재 사용자 디렉토리의 절대 경로로 대체
- os.path.expandvars(path) : path 안에 환경변수가 있다면 확장
- os.path.getatime(path) : 입력받은 경로에 대한 최근 접근 시간을 반환
- os.path.getmtime(path) : 입력받은 경로에 대한 최근 변경 시간을 반환
- os.path.getctime(path) : 입력받은 경로에 대한 생성 시간을 반환
- os.path.getsize(path) : 입렵받은 경로에 대한 byte 단위의 파일 크기를 반환
- os.path.isabs(path) : 경로가 절대 경로이면 True를 반환하고, 그 외의 경우에는 False를 반환
- os.path.isfile(path) : 경로가 파일인지 아닌지 검사, 파일이면 True를 반환
- os.path.isdir(path) : 경로가 디렉토리인지 검사, 디렉토리이면 True를 반환
- os.path.join(path1[, path2[, …]]) : OS형식에 맞도록 입력받은 경로를 연결
- os.path.normcase(path) : OS형식에 맞도록 입력받은 경로의 문자열을 정규화함
- os.path.normpath(path) : 입력받은 경로를 정규화함
- os.path.split(path) : 입력받은 경로를 디렉토리 부분과 파일부분으로 나눔
- os.path.splitdrive(path) : 입력받은 경로를 드라이브 부분과 나머지 부분으로 나눔
- os.path.splitext(path) : 입력받은 경로를 확장자 부분과 그 외의 부분으로 나눔
os.path 추가 정보들
예제 import 구문
- from os.path import *
아래 함수는 단순 문자열 처리 기능 이므로 실제 존재 여부 확인 하지 않는다.(os.path)
- join
- normcase
- normpath
- split
- splitdrive
- splitext
glob 모듈
- 원도우의 dir , 유닉스에 ls 에 해당하는 역할을 수행
- glob.glob(path)
- path 경로에 대응되는 모든 파일과 디렉토리의 리스트를 반환
- 경로를 주는 방식에 따라 절대 경로로 결과가 나오게 할 수도 있음.
- glob.iglob
- glob.glob과 동일한 동작을 수행함.
- 결과 반환을 이터레이터로 반환 하므로 많은 응답 처리시 유용하다.
tree 명령어 구현
- os.path 과 glob 모듈을 활용하여 작성 가능함.
13강 데이터베이스
SQLite3
- 디스크 기반의 가벼운 DB 라이브러리
- 서버가 필요하지 않음
- 모바일 디바이스에 기본적으로 사용되고 있음.
- 파이썬에 기본으로 포함됨
모듈 함수
- sqlite3.connect(db[, timeout, isolation_level, detect_types, factory])
- sqlite3 db에 접속
- sqlite3.complete_statement(sql)
- sql문장에 대해서 True를 반환 - sql 문장인지 확인함.
- sqlite3.register_adapter(type, callable)
- 사용자 정의 파이썬 자료형을 sqlite3에서 사용하도록 등록
- sqlite3.register_converter(typename, callable)
- sqlite3에 저장된 자료를 사용자 정의 자료형으로 변환하는 함수를 등록
Connection 클래스
- Connection.cursor()
- Cursor 객체 생성
- Connection.commit()
- 현재 트랙잭션의 변경 내역을 db에 반영함.
- Connection.rollback()
- 가장 최근 commit() 이후 지금까지 작업한 내용에 대해서 되도림
- Connection.close()
- DB연결을 종료
- Connection.isolation_level()
- 트랙잭션의 격리 수준을 확인/설정
- Connection.execute(sql[, parameters])
Connection.executemany(sql[, parameters])
Connection.executescript(sql_script)
- 임시 Cursor 객체를 생성하여 해당 execute 계열 메소드를 수행
- Connection.create_aggregate(name, num_params, aggregate_class)
- 사용자 정의 집계(aggregate) 함수를 생성
- Connection.create_collation(name, callable)
- 문자열 정렬시 SQL 구분에서 사용될 이름(name) 과 정렬 함수를 지정
- Connection.iterdump()
- 연결된 DB의 내용을 SQL 질의로 형태로 출력
Cursor 클래스
- Cursor.execute(sql[, parameters])
- SQL 문장을 실행
- Cursor.executemany(sql, seq_of_parameters)
- 동일한 SQL 문장을 파라미터만 변경하며 수행
- Cursor.executescript(sql_script)
- 세미콜론으로 구분된 연속된 SQL문장을 수행
- Cursor.fetchone()
- 조회된 결과(Record Set)로 부터 데이터 1개를 반환
- Cursor.fetchmany([size=cursor.arraysize])
- 조회된 결과로 부터 입력받은 size 만큼의 데이터를 리스트 형태로 반환
- Cursor.fetchall()
- 조회된 결과 모두들 리스트 형태로 반환
내장/집계 함수
함수 | 설명 |
abs(x) | 절대값을 반환 |
length(x) | 문자열의 길이를 반환 |
lower(x) | 소문자로 변환해서 반환 |
upper(x) | 대문자로 변환해서 반환 |
min(...) | 최소값을 반환 |
max(...) | 최대값을 반환 |
random(*) | 임의의 정수를 반환 |
count(x) | NULL이 아님 튜플의 개수를 반환 |
count(*) | 튜플의 개수를 반환 |
sum(x) | 합을 반환 |
자료형
sqlite3 자료형 | python 자료형 |
NULL | None |
INTEGER | int |
REAL | float |
TEXT | str, float |
BLOB | buffer |
함수 내용 분석 (정렬 함수)
# 함수 두 문자열을 대소문자 구분없이 비교 하여 동일하면 0 , 1, -1 def OrderFunc(str1, str2): s1 = str1.upper() s2 = str2.upper() return (s1 > s2) - (s2 > s1) -- 분석 필요함. |
14강 운영체제관련기능
os 모듈
- os.getcwd()
- 현재 작업 디렉토리 위치
- os.chdir(path)
- 현재 작업 디렉토리 위치를 변경
- os.access(path, mode)
- 입력받은 path에 대해서 mode에 해당하는 작업이 가능한 지 여부를 반환
- os.access 의 모드
- F_OK - 해당 패스의 존재 여부 확인
- W_OK - 해당 패스의 쓰기 가능 여부
- X_OK - 해당 패스의 실행 가능 여부
- R_OK - 해당 패스의 읽기 가능 여부
- os.listdir(path)
- 해당 경로에 존재하는 파일과 디렉토리들의 리스트를 반환
- os.mkdir(path[, mode])
- path에 해당하는 디렉토리를 생성
- os.makedirs(path[, mode])
- 인자로 전달된 디렉토리를 재귀적으로 생성
- os.remove(path)
- 파일 삭제
- os.unlink(path)
- 링크 제거 , 파일 삭제 효과
- os.rmdir(path)
- 디렉토리 삭제 (빈 디렉토리 일때)
- os.removedirs(path)
- 디렉토리를 순차적으로 삭제
- os.rename(src, dst)
- src -> dst로 이름을 변경하거나 이동
- os.utime(path, times)
- 경로에 해당하는 파일에 대한 access time과 modified time을 times로 수정함.
- os.walk(top[, topdwon=True[,onerror=None[,followlinks=False]]])
- top으로 지정된 디렉토리를 순회하며 경로, 디렉토리 명을 순차적으로 반환
- os.pipe()
- 파이프를 생성
- os.fdopen(fd[, mode[, bufsize]])
- 파일 descriptor를 이용해 파일 객체를 생성
- os.popen(command[, mode[, bufsize]])
- 인자로 전달된 command를 수행하며 파이프를 생성
- os.system(command)
- command를 실행하며, 성공한 경우 0을 반환
- os.startfile(path[, operation])
- path를 os에서 지정된 프로그램으로 실행
- os.execl(path, arg0, arg1, …)
- 현재 프로세스에서 새로운 프로그램을 수행
- 유사한 기능 함수들
- os.execle(path,arg0,arg1, …, env)
- os.execlp(file,arg0,arg1, …)
- os.execlpe(file,arg0,arg1, …, env)
- os.execv(path,args)
- os.execve(path,args, env)
- os.execvp(file,args)
- os.execvpe(file,args, env)
sys 모듈
- sys.argv
- 파이썬 스크립트로 넘어온 인자(argument)들의 리스트
- sys.exc_info()
- 현재 발생한 예외 정보를 튜플로 반환
- sys.exit([arg])
- 프로세스를 종료
- sys.path
- 모듈를 찾을 때 참조하는 경로를 나타냄
threading 모듈
- Thread 객체
- Thread.start() : 쓰레드 시작
- Thread.run() : 쓰레드의 주요 동작을 정의
- Thread.join([timeout]) : 쓰레드가 종료되기를 기다림
- Lock 객체
- locked, unlocked 두 가지 상태를 제공
- 메소드
- acquire() : locked 상태로 바뀜
- release() : unlocked 상태로 바뀜
** module과 동일 이름으로 파일 작성 하지 마라. 문제가 발생함.
15강 문법 총정리 및 프로젝트
요약
- 상수문자열 합치기에서는 ‘+’ 기호를 생략 가능 함
- ‘pyth’ ‘on’ -> ‘python’
- html 수집(스클롤링) 및 파서 외부 모듈
- pip install beautifulsoup4 : 수집
- import bs4
- pip install html5lib : 파서
[a]양력
Google 문서: 온라인에서 문서를 만들고 수정해 보세요. Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA 다른 사용자가 Google 문서의 문서를 나와 공유하여 발송된 이메일입니다. |