- 파이썬이란?
- 1991년 프로그래머 귀도 반로섬이 발표한 고급 프로그래밍 언어로 플랫폼에 독립적인 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어이다.
- 파이썬의 특징
- 가독성 - 간결하고 가독성이 좋으며, 코드블럭을 들여쓰기로 구분
- 풍부한 라이브러리 - 광범위한 라이브러리가 기본 포함되어있고, 외부 라이브러리가 풍부하며 확장이 쉬움
- 접착성 - 쉽게 라이브러리 추가 가능
- 유니코드 - 문자열은 모두 유니코드로 되어 있어 나라별 언어코드 변경을 신경쓰지 않아도 됨
- 동적타이핑 - 런타임 시에 타입 체크를 하는 동적타이핑을 지원하고 메모리 관리를 자동으로 함
- 파이썬 설치 방법
- 파이썬 홈페이지(http://python.org/download)
- 맥에서 파이썬 설치 방법 (https://medium.com/@psychet_learn/python-기초-2장-python-설치-및-환경설정-mac-os-x-ver-9e7e6d46eb2c)
- 파이썬 2.x, 3.x 차이 정리
- 링크 : 파이썬 2.x, 3.x 차이
- 파이썬 자료형과 연산자
- 수치
- Int - 정수형 숫자이며, 기본은 10진법을 따르고 숫자 앞에 코드명에 따라서 2진법, 8진법, 16진법이 가능
- Float - 실수형 숫자
- Complex - 복소수
- 연산자 : +, -, *, /, %, =, **(지수승), // (정수 나눗셈)
- 문자
- 작은 따옴표, 큰 따옴표를 이용하여 문자를 표시
- 입력한 문자를 그대로 사용 시에는 """, """ 로 실행
- Escape 문자
- \n : 개행(줄바꿈)
- \t : 탭
- \r : 캐리지 리턴
- \0 : 널(Null)
- \\ : 문자 \
- \' : 단일 인용부호(작은 따옴표)
- \" : 이중인용 부호(큰 따옴표)
- 연산자 : +(생략가능), *(입력문자를 몇 번 반복할 때 사용)
- 인덱싱과 슬라이싱
- 인덱싱 : 문자형에서 입력된 문자의 특정 문자가 몇 번쨰 위치하는지 표시
- 슬라이싱 : 문자형에서 입력된 문자를 얼마나 표시할지 또는 뒤에서 몇번쨰 위치부터 출력할지 등을 결정
- 리스트
- 값들의 나열로 문자처럼 인덱싱과 슬라이싱이 가능
- [] 안에 값들을 나열
- 연산자: append(뒤에 이어서 삽입), insert(특정 위치에 삽입), extend(특정 리스트를 뒤에 이어서 삽입), +, count(리스트 값 개수), pop(끝 값출력 후 삭제), remove(삭제), sort(정렬)
- 세트
- 집합과 동일
- {} 안에 값들을 나열
- 연산자 : 리스트에서 지원하는 연산자에 intersection(교집합), union(합집합)
- 튜플
- 리스트와 유사하나 읽기 전용
- () 안에 값들을 나열
- 읽기 전용이라 제공되는 함수는 리스트에 비해 적지만 속도는 빠르다.
- 연산자 : count, index
- 딕셔너리
- 키와 값의 쌍으로 이루어짐
- 표시는 키 : 값 형태로 저장
- 인덱스는 지원하지 않음
- 연산자 : items(키와 값 반환), keys(키만 반환), values(값만 반환), del(특정 키와 그 값을 삭제), clear(저장된 딕셔너리 키와 값 모두 삭제)
- 부울
- 참과 거짓을 나타냄
- True, False만 있음
- 별도의 연산자 없이 논리연산이나 비교연산의 결과로 사용
- 변수에 대한 자료형 확인
- type() 함수로 현재 변수의 자료형을 확인
- 사용법 : type(<변수>) -> 변수에 대한 자료형을 <class '자료형'>의 형태로 보여줌
- 얕은 복사와 깊은 복사
- 얕은 복사 - 주소가 복사되어 객체를 공유하는 경우로 원본이나 복사본 둘 중에 하나만 바뀌어도 모두 바뀜
예) a = [1,2,3]이고, a = b로 설정하여 얕은 복사를 실행한 상태에서 a[0] = 40을 넣어 결과를 확인하면 a = [40, 2, 3], b = [40, 2, 3]으로 모두 바뀜 - 깊은 복사 - 객체를 공유하지 않는 경우로 원본이나 복사본 둘 중에 하나만 바뀌면 바꾼 대상만 변경되고, 나머지는 이전 상태를 유지
예) a = [1,2,3]이고, b = a[:]로 설정하여 깊은 복사를 실행한 상태에서 a[0] = 40을 넣어 결과를 확인하면 a = [40, 2, 3], b = [1, 2, 3]으로 바꾼 쪽만 변경 - 함수
- 정의 : 여러 개의 문장을 하나로 묶어주어 한 번 혹은 여러 번 호출하여 프로그램을 구조적, 논리적으로 만들어 준다.
- 함수 선언 방법
def<함수명>(인수1, 인수2, ... 인수N):
<구문>
return <반환값> - 함수 선언 시에는 시작과 끝을 명시하진 않지만 반드시 들여쓰기로 구분해주어야 한다.
- 스코핑 룰(Scoping rule)
- 이름 공간(Name Space)
- 변수의 이름이 저장되어 있는 장소
- 함수 내부의 이름 공간, 지역 영역(Local scope)
- 함수 밖의 영역, 전역 영역(Global scope)
- 파이썬 자체에서 정의한 내용에 대한 영역, 내장 영역(Built-in scope)
- LGB 규칙
- 지역 영역(Local scope) -> 전역영역(Global scope) -> 내장영역(Built-in scope)
- 만약 지역 영역에서 전역영역의 이름을 접근 시 global 키워드를 사용
- 인수모드
- 인수를 지정하지 않아도 기본 값이 할당
>>> def Times(a = 10, b = 20) :
return a*b
>>> Times() => 200이 출력 - 변수의 이름으로 특정 인수를 전달
>> def connectURL(server, port) :
str = "http://"+server+":"+port
return str
>>> connectURL(port="8080",server="test.com")이 가능 - 인수의 개수가 정해지지 않은 가변 인수를 전달
>>> def union2(*ar):... - 정의되지 않은 인수를 딕셔너리(key, value) 형식으로 전달
>>> def userURIBuilder(server, port, **user):... - 람다(Lambda)함수
- 이름이 없는 1줄 짜리 함수
- 형식 : Lambda 인수 : <구문> -> lambda x, y : x + y
- 프로그램의 가독성을 위해서 사용
- 재귀적 함수 호출
- 함수 내부에서 자기 자신을 계속 호출하는 방법
- 변수를 조금씩 변경 하면서 연속적으로 반복된 연산 시 사용
- Pass 구문
- 아무일도 하지 않음
- 형식
>>> def sample():
pass - __doc__속성과 Help 함수
- Help 함수로 함수에 대한 설명을 볼 수 있다.
- 더 자세한 설명을 추가하려면 __doc__속성을 이용
- 형식 : 함수명.__doc__ = "함수에 대한 설명"
- 이터레이터(Iterater)
- 순회 가능한 객체의 요소를 순서대로 접근하게 하는 객체
- 내부 반복문을 관리
- 호출 방법 : iter(순회 가능 객체)
- next 함수를 이용하여 순회 가능 객체의 요소를 하나씩 접근
- 제너레이터(Generator)
- 함수 마지막에 return 대신 yield로 함수 객체를 유지한 상태에서 값을 호출자에 넘겨줌
- 함수의 상태를 그대로 유지하고 다시 호출해서 순회가능한 객체를 만들 떄 매우 편리
- 생성방법
>>> def copy(data):
for index in range(1,len(data)-1):
yield data[index] - 제어문
- 파이썬은 기본적으로 순차적으로 실행
- 제어문을 이용하여 특정 조건일 때 실행하지 않도록 하거나 여러번 반복해야할 작업을 간단히 표현할 수 있도록 함
- IF 문
- 조건식을 평가하고 참인 경우만 구문이 수행
- 2개 이상의 구문은 들여쓰기로 블록을 지정
- 형식 if <조건식>:
- 2개 이상의 조건을 처리하는 경우는 elif 구문을 사용
- 형식
if <조건식1>:
<구문1>
elif <조건식2>:
<구문2>
else:
<구문3> - 단축평가
- 정의 : 조건식 전체를 판단하지 않고 순차적으로 진행 중에 식 전체가 자명한 경우, 더 이상 평가를 하지 않는 방법
- A and B 조건의 경우 A 조건이 거짓이면 B 조건이 참일지라도 전체 조건이 거짓이라 B 조건을 평가하지 않음
- A or B 조건의 경우 A 조건이 참이면 B 조건이 참, 거짓에 상관없이 전체 조건이 참이라 B 조건을 평가하지 않음
- 반복문
- While 문
- 형식
while<조건식>:
<구문> - 조건식이 참인 동안은 내부 구문을 반복해서 수행
- 조건식이 거짓이면 While 문 구조를 벗어남
- 조건식이 항상 참이 나와서 무한 루프에 빠지지 않도록 주의가 필요하다.
- For 문
- 형식
for<아이템 I> in <시퀀스형 객체 S>:
<구문> - 시퀀스형 객체(문자열, 리스트, 튜플, 딕셔너리, 이터레이터 등)를 순차적으로 순회
- 시퀀스형 객체 S의 각 아이템을 아이템 I 에 할당
- 모든 아이템을 순회하거나 break 문을 만나면 for문 종료
- 리스트 내장
- 기존 시퀀스 객체를 이용하여 추가적인 연산으로 새로운 시퀀스 객체를 생성
- 형식 : [<표현식> for<아이템> in <시퀀스 객체> (if<조건식>)]
- Filter
- 함수의 결과 값이 참인 시퀀스 객체의 이터레이터를 반환
- 형식 : filter(<function>|None, 시퀀스 객체)
- Range
- 수열을 순회하는 이터레이터 객체를 반환
- 형식 : range('시작값','종료값'[, '증가값'])
- Map
- 시퀀스 객체를 순회하면 fuction의 연산을 수행
- 형식 : map(<function>, 시퀀스 객체1 , 시퀀스 객체2, ...)
- 시퀀스 객체 중에서 가장 갯수가 작은 시퀀스 객체에 맞추어서 fuction에 대한 연산
- 시퀀스 객체1, 시퀀스 객체2 에 대해서 Map 연산으로 매칭되는 값을 더할 경우, 시퀀스 객체1은 2개, 시퀀스 객체2가 4개일 경우, 연산의 결과는 2개까지만 나옴
- 클래스
- 정의 : 데이터와 데이터를 변형하는 함수를 같은 공간으로 작성
- 특징 : 메서드(Method), 인스턴스(Instance), 정보 은닉(Information Hiding), 추상화(Abstraction)
- 생성자와 소멸자
- 생성자
- 정의 : 클래스 생성 시 초기화 작업을 수행
- 형식 : __init__()
- 소멸자
- 정의 : 소멸 시 종료 작업을 수행
- 형식 : __del__()
- 상속
- 부모 클래스의 모든 속성(데이터, 메소드)를 자식 클래스로 물려줌
- 클래스의 공통된 속성을 부모 클래스에 정의
예) 삼각형 클래스, 사각형 클래스 -> 부모 클래스 : 도형 클래스에서 삼각형 클래스, 사각형 클래스 의 공통된 데이터, 메소드를 정의 후 자식 클래스인 삼각형 클래스, 사각형 클래스에서 상속받아서 사용 - 하위 클래스에서는 각 하위 클래스에 대한 특화된 메소드와 데이터를 정의
- 다중 상속
- 2개 이상의 클래스를 상속받아서 사용 (자바에서는 단일 상속만 가능하나 인터페이스를 이용하여 다중 상속 가능)
- 상속 받은 클래스에 모든 속성(데이터, 메소드)를 전달 받아서 사용 가능
- 모듈
- 정의 : 여러 코드를 한 데 묶어서 다른 곳에서도 사용할 수 있도록 함
- 장점
- 코드의 재 사용성
- 코드릴 이름공간으로 구분하고 관리 할 수 있음
- 복잡하고 어려운 기능을 포함하는 프로그램을 간단하게 만들 수 있음
- 사용 방법
- import <모듈> : 기본적인 임포트 방법
- from <모듈> import <어트리뷰트>
- from <모듈> import * : 모듈 전체를 사용
- import <모듈> as <별칭> : 모듈 이름이 길 때 별칭을 주어서 사용
- 모듈의 경로
- 모듈 임포트 시 모듈의 위치는 sys.path에 저장된 디렉토리를 검색
- 모듈 경로 밖의 모듈은 임포트 할 수 없음
- 모듈 경로 탐색 순서
- 프로그램이 실행된 디렉터리
- PYTHOBPATH 환결 변수에 등록된 위치
- 표준 라이브러리 디렉터리
- 패키지
- 정의 : 모듈의 모음
- 생성 방법
- 패키지명으로 할 디렉토리를 만들어서 포함할 모듈들을 디렉토리에 넣음
- 접근은 import 디렉토리.모듈 또는 from 디렉토리 import 모듈
- 예) 모듈1.py, 모듈2.py 가 packagetest 폴더에 있을 때 모듈1 접근 방법
- import packagetest.모듈1
- from packagetest import 모듈1 로 접근
- 패키지는 모듈 파일을 가지고 있는 디렉토리
- 참고 사이트 : https://wikidocs.net/1418
- 외부 모듈 설치 방법
- 파이썬에서 제공하는 기본 모듈을 이외에 확장하여 외부에서 개발된 모듈을 설치해서 사용 가능
- 설치 명령어 : pip install 외부 모듈명
- 예외 처리
- 정의 : 프로그램의 제어 흐름을 조정하기 위해 사용하는 이벤트로 프로그램 작동 중에 이상현상 발생 시 처리하는 것을 의미
- 종류 : 선언하지 않은 변수를 호출 시 발생, 0으로 나누는 연산 실행, 리스트에 접근 가능한 인덱스를 넘김, 지원하지 않는 연산 수행 등
- 처리 방법
- try - except
try:
<예외 발생 가능성이 있는 문장>
except: <예외종류>:
<예외 처리 문장>
except: (예외1,예외2):
<예외 처리 문장>
except: <예외종류> as 인자:
<예외 처리 문장> - try ~ except ~ else ~ finally
try:
<예외 발생 가능성이 있는 문장>
except: <예외종류>:
<예외 처리 문장>
except: (예외1,예외2):
<예외 처리 문장>
except: <예외종류> as 인자:
<예외 처리 문장>
else:
<예외가 발생하지 않은 경우, 수행할 문장>
finally:
<예외 발생 유무에 상관없이 try 블록 이후 수행할 문장> - raise [Exception(data)]
raise <발생 시킬 에러 명시>
예) raise NameError - assert <조건식>, <관련 데이터>
assert <조건식>, <조건식이 만족하지 않을 떄, 관련 데이터> - sys.exc_info() 이용
exc, value, tb = sys.exc_info()
print(exc, value, tb)
-> exc (어떤 에러인지), value(에러 발생 값), tb(Traceback ~)
traceback.print_exc()
- 예외 처리 시에 좁은 범위에서 넓은 범위로 확인하도록 함
- 입출력
- 화면 입출력
- 출력
- 화면으로 사용자가 원하는 내용을 나타냄
- 사용 인자/함수 : print
- 2.x 버전 : print "출력할 내용" 으로 인자로 사용
- 3.x 버전 : print("출력할 내용") 으로 함수로 사용
- print만으로 출력할 때 불편하여 format() 함수를 지원
- "apple is red"를 출력하는 방법
- 기본 사용법 : print("{0} is {1}".format("apple", "red"))
- dictionary를 입력으로 사용
- print("{item} is {color}".format(item="apple", color="red"))
- dic = {"item":"apple", "color":"red"}
print("{0[item]} is {0[color]}".format(dic)) - dic = {"item":"apple", "color":"red"}
print("{item} is {color}".format(**dic)) - 입력
- 화면으로 사용자가 원하는 내용을 넣고 싶을 때 사용
- 사용 함수 : input() 함수
- 사용법 : <저장할 변수> = input("입력인자로 화면에 출력할 프롬프트")
- 파일 입출력
- 파일 입출력 시에 세밀한 제어를 위해서 open() 함수로 파일을 열고, 파일 전용 함수들을 이용해서 작업
- 기본형 : 파일객체 = open(file 경로, mode)
- open() 함수에 마지막 인자인 Mode 속성
- r : 읽기 모드(디폴트)
- w : 쓰기 모드
- a : 쓰기 + 이어쓰기 모드
- + : 읽기 + 쓰기 모드
- b : 바이너리 모드
- t : 텍스트 모드(디폴트)
- 출력
- 파일에 저장되어 있는 내용을 화면에 나타냄
- 사용 함수
- read() 함수 : 파일에 입력된 내용을 문자열로 반환
- readline() 함수 : 파일에 입력된 내용을 한 줄씩 문자열로 반환
- readlines() 함수 : 파일의 모든 내용을 줄 단위로 잘라서 리스트를 반환
- tell() 함수 : 현재 파일에서 어디까지 읽고 썼는지 위치를 반환
- seek() 함수 : 사용자가 원하는 위치로 파일 포인터를 이동
- 입력
- 사용자가 입력한 내용을 파일에 저장
- 사용 함수 : write() 함수
- 사용법 : open() 함수에서 Mode를 쓰기 모드인 "w"로 설정 후에 write("파일에 쓸 내용") 으로 파일에 저장
- close() 함수
- 파일을 open() 함수로 열어서 입력 또는 출력을 한 후에는 반드시 파일을 닫는 close() 함수를 사용하도록 함
- with ~ as 구문
- 파일을 open() 함수로 열고 파일을 닫아주는 close() 함수를 한 쌍으로 사용해야 하지만, with ~ as 를 통해서 open() 함수로 열고 따로 close() 함수를 호출하지 않아도 자동으로 close() 함수를 호출한 효과를 내는 구문
- 사용법 : with open() as 파일 객체 이름:
- 구문이 끝나면 바로 close() 함수를 호출한 효과를 냄
- 문자열
- 정의 : 문자열을 다루는 기본 클래스로 특별한 모듈을 import할 필요 없는 내장 클래스
- 문자열 함수 종류
- 문자의 대소문자 변경 함수
- capitalize()
- 가장 첫 글자만 대문자로 변경하고 나머지는 소문자로 변경
- "python".capitalize() -> "Python"
- lower()
- 문자열 중에 알파벳 문자가 있는 경우 모두 소문자로 변경
- "PYthon".lower() -> "python"
- swapcase()
- 문자열 중에 대문자가 있다면 소문자로 소문자가 있다면 대문자로 변경
- "PyThOn Is PoWeRfUl".swapcase() -> "pYtHoN iS pOwErFuL"
- title()
- 문자열 중에 첫 글자 또는 스페이스나 개행, 탭 이후의 첫 글자를 모두 대문자로 변경하고 나머지는 소문자로 변경
- "python is powerful".title() -> "Python Is Powerful"
- upper()
- 문자열 중에 알파벳 문자가 있는 경우 모두 대문자로 변경
- "PYthon".upper() -> "PYTHON"
- 문자열의 특정 문자의 개수를 파악하는 함수
- count(keyword, [start [,end]])
- keyword에 있는 문자가 몇 번 나오는지 횟수를 반환
- "python is powerful".count('p') -> 2 ('p' 가 두 번 나옴)
- 문자열의 인코딩 변환 함수
- encode([encoding, [errors])
- 입력된 문자의 인코딩을 변경하고, 에러가 발생하면 그 에러를 어떻게 표현하는지 나타냄
- "가나다".encode('cp949') -> b'\xb0\xa1\xb3\xaa\xb4\xd9' -> cp949 인코딩으로 변환
- 문자열 내에 특정 문자가 있는지 확인 함수
- endswith(postfix, [start [,end]])
- postfix가 문자열 끝에 포함되어 있으면, True 반환하고, 없으면 False 반환
- "python is powerful".endswith('ful') -> True
- isalnum()
- 전체 문자열이 알파벳, 숫자만 있는지 확인
- "python3000".isalnum() -> True
- "python 3.2".isalnum() -> False
- isalpha()
- 전체 문자열이 알파벳만 있는지 확인
- "python".isalpha() -> True
- "python3000".isalpha() -> False
- islower()
- 전체 문자열이 소문자인지 확인
- "python3.2".islower() -> True
- "Python".islower -> False
- isspace()
- 전체 문자열 스페이스 문자인지 확인
- "python ".isspace() -> True
- "python".isspace() -> False
- istitle()
- 문자열 내에 문자가 가장 처음 또는 띄어쓰기 후 처음 나오는 문자가 대문자이고 나머지는 소문자인 타이틀 형식을 따르는지 확인
- "Python Is Powerful".istitle() -> True
- "python is powerful".istitle() -> False
- isupper()
- 전체 문자열이 대문자인지 확인
- "PYTHON3.2".isupper() -> True
- "Python".isupper() -> False
- isdecimal(), isdigit(), isnumeric()
- 전체 문자열이 숫자만 있는지 확인
- "2580".isdecimal() or "2580".isdigit() -> True
- "\u00bc".isdecimal() -> False ("\u00bc"는 1/4를 유니코드로 나타내며, 문자가 포함되어 False)
- "\u00bc".isnumeric() -> True
- startswith(prefix [, start [,end]])
- prestfix가 문자열 처음에 포함되어 있으면, True 반환하고, 없으면 False 반환
- "python is powerful".startswith('py') -> True
- 문자열 내에 특정 문자 삽입하거나 제거하는 함수
- expandtabs([tabsize])
- 문자열 내에 '\t' 문자가 있으면 나타내지 않음
- "python\tis\tpowerful".expandtabs() -> "python is powerful"
- join(sequence)
- 문자열 내에 문자 사이에 sequence를 입력할 때 사용
- ".".join("HOT") -> H.O.T
- lstrip([chars])
- 문자열 내에서 왼쪽에 chars 를 제거, 빈 값인 경우 스페이스나 개행 문자 등을 제거
- "\t python".lstrip() -> "python"
- ">>> python".lstrip("> ") -> "python"
- maketrans(x [, y [,z]])
- 문자열 내에 x 가 발견되면 y 로 변경하고, z 가 발견되면 제거하며 translate() 함수 내에 인자로 사용
- "python is powerful".translate(str.maketrans("po", "P0") -> "Pyth0n is P0werful" ('p' 문자는 'P'로, 'o' 문자는 '0' 로 매칭되어 변경)
- replace(old, new, [count])
- 문자열 내에서 old 의 문자가 검색되면 new 로 교체하며, count는 몇 번할지 횟수를 결정
- "python is powerful".replace("p", "P", 1) -> "Python is powerful"
- rstrip([chars])
- 문자열 내에서 왼쪽의 chars 를 제거, 빈 값인 경우 스페이스나 개행 문자 등을 제거
- "\t python".lstrip() -> "python"
- ">>> python <<<".lstrip("< ") -> ">>> python"
- strip([chars])
- 문자열 내에서 chars 를 제거, lstrip() 함수와 rstrip() 함수를 합침
- "\t python \t".strip() -> "python"
- ">>> python <<<".strip("<> ") -> "python"
- 문자열 내에 특정 문자의 위치를 확인하는 함수
- find(keyword, [start [,end]])
- 문자열 내에서 keyword가 어느 위치에서 처음에 나오는 위치 반환
- "python is powerful".find('p') -> 0 ('p'가 처음 나온 위치는 가장 처음인 0)
- 문자열 내에서 keyword 를 찾지 못하면 -1 값을 반환
- index(keyword, [start [,end]])
- 문자열 내에서 keyword가 어느 위치에서 처음에 나오는지 반환
- "python is powerful".find('p') -> 0 ('p'가 처음 나온 위치는 가장 처음인 0)
- 문자열 내에서 keyword 를 찾지 못하면 에러 발생
- rfind(keyword, [start [, end]])
- 문자열 내에서 keyword가 어느 위치에 있는지 끝에서부터 확인해서 처음에 나오는 위치 반환
- "python is powerful".find('p') -> 10 ('p'가 끝에서 처음 나온 위치는 10)
- 문자열 내에서 keyword 를 찾지 못하면 -1 값을 반환
- rindex(keywork, [start [, end]])
- 문자열 내에서 keyword가 어느 위치에 있는지 끝에서부터 확인해서 처음에 나오는 위치 반환
- "python is powerful".find('p') -> 10 ('p'가 끝에서 처음 나온 위치는 10)
- 문자열 내에서 keyword 를 찾지 못하면 에러 발생
- 문자열을 나누는 함수
- partition(seperator)
- 문자열을 seperator 기준으로 쪼갬
- "python is powerful".partition("is") -> ("python", "is", "powerful")
- rpartition(seperator)
- 문자열을 seperator 기준으로 쪼개는데 오른쪽부터 확인
- "python is powerful".rpartition("p") -> "python is ", "p", "owerful")
- rsplit([seperator [, maxsplit]])
- 문자열 내에서 seperator 기준으로 쪼개는데 오른쪽부터 확인하며 seperator 값이 없다면 스페이스, 개행, 탭 문자로 쪼갬
- "python is powerful".rsplit(' ', 1) -> ("python is", "powerful")
- split([seperator [, maxsplit]])
- 문자열 내에서 seperator 기준으로 쪼개는데 처음부터 확인하며 seperator 값이 없다면 스페이스, 개행, 탭 문자로 쪼갬
- "python is powerful".split(' ', 1) -> ("python", "is powerful")
- splitlines([keep])
- 문자열 내에 개행 문자를 기준으로 쪼갬
- "python\r\nis\npowerful".splitlinex() -> ["python", "is", "powerful"]
- "python\r\nis\npowerful".splitlinex(True) -> ["python\r\n", "is\n", "powerful"]
- 정규표현식
- 정의 : 문자나 문자의 패턴을 나타내기 위한 특수 문자
- 문법
문법 의미 . 개행 문자를 제외한 1자를 의미 ^ 문자열의 시작 $ 문자열의 종료 [] 문자의 집합 | OR () 괄호 안의 정규식을 그룹으로 만듦 * 문자가 0회 이상 반복 + 문자가 1회 이상 반복 ? 문자가 0 혹은 1회 반복 {m} 문자가 m회 반복 {m,n} 문자가 m회부터 n회까지 반복되는 모든 경우 {m,} 문자가 m회부터 무한 반복되는 모든 경우
- Escapse 문자열
종류 설명 \w 밑줄과 표현 가능한 문자 [a-zA-Z0-9_] \W 밑줄과 표현 가능한 문자를 제외한 나머지 문자 [^a-zA-Z0-9_] \d 0-9를 포함하는 모든 숫자 [0-9] \D 숫자를 제외한 모든 문자 [^0-9] \s 공백문자 [\t\n\r] \S 공백문자를 제외한 모든 문자 [^\t\n\r] \\ 역슬래쉬(\) 문자 자체를 의미
- 날짜 다루기
- 컴퓨터에서 시간을 표현하는 방법
- 타임스탬프(Time Stamp)
- UTC(Universal Time Coordinated, 협정세계시)
- 그리니치 평균시
- LST(Local Standard Time, 지방표준시)
- 일광절약 시간제(Daylight Saving Time, DTS)
- 시간을 다루는 객체
- struct_time 시퀀스 객체
- 시간을 표현하는데 사용
- tm_year : 년도 (1999, 2018, ...)
- tm_mon : 월 (1 ~ 12)
- tm_mday : 일 (1 ~ 31)
- tm_hour : 시 (0 ~ 23)
- tm_min : 분 (0 ~ 59)
- tm_sec : 초 (0 ~ 61)
- tm_wday : 요일 (0 ~ 7 이며, 월요일은 0으로 표현)
- tm_yday : 누적날짜
- time 모듈
- 시간을 표현하는데 사용
- time.time() : 1970년 1월 1일 자정 이후로 누적된 초를 float 단위로 반환
- time.sleep(seconds) : 현재 동작 중인 프로세스를 주어진 초만큼 정지
- time.gmtime([seconds]) : 입력된 초를 변환하여, UTC 기준의 struct_time 시퀀스 객체를 반환
- time.localtime([seconds]) : 입력된 초를 변환하여, 지방표준시 기준의 struct_time 시퀀스 객체를 반환
- time.asctime([t]) : struct_time 시퀀스 객체로 받아서 'Sun Mar 15 18:50:20 2009' 형태로 반환
- time.mktime(t) : struct_time 시퀀스 객체로 받아서 누적된 초로 반환
- strptime, strftime
- 사용자가 직접 형식을 지정하여 출력
- 사용법
- strptime : time.strptime(string [, format])
- strftime : time.strftime(format [. t]) t는 struct_time 시퀀스 객체
- %y : 연도를 축약해서 표시 1999 -> 99
- %Y : 연도를 축약하지 않고 표시 1999
- %b : 축약된 월 이름 March -> Mar
- %B : 축약되지 않은 월 이름
- %m : 숫자로 표현한 월 (01 ~ 12)
- %d : 일 (01 ~ 31)
- %H : 24시를 기준으로 한 시 (00 ~ 23)
- %l : 12시를 기준으로 한 시 (00 ~ 12)
- %M : 분 (00 ~ 59)
- %S : 초 (00 ~ 61)
- %p : AM/PM
- %a : 축약된 요일 이름 Friday -> Fri
- %A : 축약되지 않은 요일 이름 Friday
- %w : 요일을 숫자로 표시 (0 ~ 7, 월요일은 0)
- %j : 1월 1일부터 누적된 날짜 (001 ~ 366)
- datetime
- 날짜, 시간 연산을 위해 사용
- 주요 클래스
- datetime.date : 일반적으로 사용하는 그레고리안 달력(Gregorian Calendar)의 년, 월, 일을 표현
- data 클래스 생성자 : date(year, month, day)
- datetime.time : 시간을 시, 분, 초, 마이크로 초, 시간대(Time zone)로 표현
- time 클래스 생성자 : time(hour [, minute [, second [, microsecond [, time zone info]]]])
- datetime.datetime : date 클래스와 time 클래스의 조합으로 구성
- data 클래스 생성자 : date(year, month, day)
- time 클래스 생성자 : time(hour [, minute [, second [, microsecond [, time zone info]]]])
- datetime.timedelta : 두 날짜 혹은 시간 사이의 기간을 표현
- timedelta 클래스 생성자 : timedelta([days [, seconds [, microseconds [, milliseconds [, minutes [, hours [, weeks]]]]]])
- timedelta 클래스에 일, 시, 분, 초, 밀리 세컨드, 마이크로 세컨드, 주 단위로 지정 날짜의 이전/이후의 날짜를 계산할 때 사용
- 2019-04-20 에 대해 5일 후를 알고 싶으면 timedelta(days=5)로 해서 더해주면 2019-04-20의 5일 후인 2019-04-25 출력
- 숫자 다루기
- 특별한 모듈 임포트 없이 사용 가능한 함수
- sum(iterable [, start]) : 순회 가능한(iterable) 객체의 총 합계를 반환
- max(iterable) : 순회 가능한 객체의 최대값을 반환
- min(iterable) : 순회 가능한 객체의 최소값을 반환
- abs(x) : x의 절대값을 반환 abs(-1) -> 1
- pow(x, y [, z]) : x의 y 제곱 값을 반환
- round(x, [, n]) : x의 반올림 결과를 반환
- divmod(a, b) : 'a/b'의 몫과 나머지를 튜플 형태로 반환
- math 클래스에서 사용 가능한 함수
- 지수, 로그 연산
- math.pow(x, y) : x의 y 제곱한 결과를 반환
- math.sqrt(x) : x의 제곱근(square root)한 결과를 반환
- math.exp(x) : 'e^x' 의 결과를 반환
- math.log(x [, base]) : 밑을 base로 하는 log x의 결과를 반환
- 삼각함수 연산
- math.degrees(x) : 라디안으로 표현된 각도를 60분법으로 변환
- math.radians(x) : 60분법으로 표현된 각도를 라디안으로 변환
- math.sin(x) : x의 Sin 값을 반환
- math.cos(x) : x의 Cos 값을 반환
- math.tan(x) : x의 Tan 값을 반환
- fraction 클래스로 분수 표현
- 분수를 나타내는 모듈
- 생성자
- Fraction(분자 = 0, 분모 = 1) -> Fraction(1, 2)
- Fraction(Fraction 객체) -> Fraction(3) -> Fraction(3, 1)
- Fraction(문자열) -> Fraction('3.14') -> Fraction(157, 50)
- random 클래스로 임의의 수를 표현
- 여러가지 random 함수
- random.seed([x]) : 임의 숫자 생성기의 초기화 작업을 함
- random.random() : 0.0 <= F <= 1.0 사이의 임의의 float 숫자 F 반환
- random.uniform(a, b) : a.0 <= F <= b.0 사이의 임의의 float 숫자 F 반환
- random.randrange([start], stop [, step]) : 내장 함수인 range()의 아이템 중에서 임의로 선택하여 반환
- random.randint(a, b) : a <= N <= b 임의의 정수 N 반환
- random.choice(seq) : 입력받은 시퀸스 객체의 임의의 아이템 반환
- random.shuffle(x [, random]) : 입력받은 시퀀스 객체를 섞음
- 파일 시스템
- 파일 경로에 대한 정보를 확인하는 모듈과 파일 경로 내에 존재하는 모든 파일에 대한 목록을 확인하는 모듈
- os.path 모듈
- 파일에 대해서 절대 경로 반환, 파일인지 디렉토리인지 확인 등에 대한 파일 경로에 대한 정보를 확인하는 모듈
- 함수목록
- abspath('기본 이름') : 절대 경로를 반환 -> abspath('tmp') : 'C:\\aaa\\tmp'
- basename('경로') : 입력받은 경로의 기본 이름을 반환하며, 경로에 있는 파일을 확인하지 않음 -> basename('C:\\aaa\\tmp') : 'tmp'
- dirname('경로') : 입력받은 파일/디렉토리를 포함하는 디렉토리 경로를 반환
- exist('경로') : 입력받은 경로가 존재하는지 확인, 존재하면 True, 존재하지 않으면 False 반환
- expanduser('경로') : 입력받은 경로 안에 '~'를 현재 사용자 디렉토리의 절대 경로로 대체하여 반환 -> expanduser('~\\test') : 'C:\\Users\\Administrator\\test'
- expandvars('경로') : 입력받은 경로 안에 환경변수가 있다면 확인하여 반환 -> expandvar('$JAVA_HOME\\bin') : 'C:\\ProgramFiles(x64)\\java\\bin'
- 파일에 대한 수정, 생성, 접근 시간 관련 함수
- getatime('경로') : 입력받은 경로에 최근 접근 시간을 반환
- getmtime('경로') : 입력받은 경로에 최근 변경 시간을 반환
- getctime('경로') : 입력받은 경로에 최근 생성 시간을 반환
- getsize('경로') : 입력받은 경로에 대한 바이트 단위의 파일 크기를 반환
- isabs('경로') : 입력받은 경로가 절대 경로면 True, 그외는 False 반환
- isfile('경로') : 입력받은 경로가 파일이면 True, 그외는 False 반환
- isdir('경로') : 입력받은 경로가 디렉토리면 True, 그외는 False 반환
- join('경로 1' [, '경로 2' [, ...]]) : OS 형식에 맞게 입력받은 경로를 연결
- join('C:\\abc', 'bbb', 'test.text') -> 'C:\\abc\\bbb\\test.text'
- join('C:\\abc', 'D:\\aaa', 'test.text') -> 'D:\\aaa\\test.text'
- normpath('경로') : 입력받은 경로를 정규화하는 함수로, 현재 경로를 나타내는 '.'이나 상위 경로인 '..'을 주로 처리
- normpath('C\\aaa\\bbb\.\test.text') : 'C:\\aaa\\bbb\\test.text'
- normpath('C\\aaa\\bbb\..\test.text') : 'C:\\aaa\\test.text'
- 입력 받은 경로에 대해서 특정 부분을 나누는 함수
- split('경로') : 디렉토리 부분과 파일 부분을 나눔
- splitdrive('경로') : 드라이브 부분과 나머지 부분을 나눔
- splitext('경로') : 확장자 부분과 그 외의 부분으로 나눔
- glob 모듈
- 경로에 대응되는 모든 파일 및 디렉토리의 리스트를 반환
- glob.glob('경로') : 입력 받은 경로에 대응되는 모든 파일 및 디렉토리의 리스트를 반환
- glob.iglob('경로') : 입력받은 경로에 대응되는 모든 파일 및 디렉토리의 이터레이터를 반환
- 데이터베이스
- 파이썬에서는 SQLite3을 지원하여 사용
- SQLite3 ?
- 디스크 기반의 가벼운 데이터베이스 라이브러리
- 서버가 필요하지 않음
- 모바일 디바이스(Android, IOS 등)에서 기본적으로 사용
- SQLite3 모듈 함수
- sqlite3.connect(database [timeout, isolation_level, detect_types, factory]) : SQLite3 DB에 연결
- sqlite3.register_adapter(type, callable) : 파이썬 자료형을 SQLite3에서 사용하게 등록
- sqlite3.register_converter(typename, callable) : SQLite3에 저장된 자료를 파이썬 자료형으로 변환하는 함수 등록
- Connection 클래스
- sqlite3.connect() 함수의 리턴된 객체
- 함수
- Connection.cursor() : Cursor 객체 생성
- Connection.commit() : 현재 트랜젝션의 변경 내역을 DB에 반영
- Connection.rollback() : 가장 최근의 commit() 이후 지금까지 작업한 내용에 대해서 되돌림
- Connection.close() : DB 연결 종료, sqlite3.connect() 함수 사용 시 반드시 사용해야하는 함수
- Connection.iterdrump() : 연결된 DB의 내용을 SQL 질의 형태로 출력
- Cursor 클래스
- Connection.cursor() 함수의 리턴된 객체
- 함수
- Cursor.execute(sql [, parameters]) : SQL 문장을 실행, Connection.execute(sql [, parameters]) 와 같이 사용가능
- Cursor.executemany(sql, seq_of_parameters) : 동일한 SQL문장을 파라미터만 변경하며 수행, Connection.executemany(sql [, parameters]) 와 같이 사용 가능
- Cursor.executescript(sql_script) : 세미콜론으로 구분된 연속된 SQL 문장 수행, Connection.executescript(sql_script) 와 같이 사용가능
- Cursor.fetchone() : 조회된 결과로 부터 데이터 1개를 반환
- Cursor.fetchmany([size=cursor.arraysize]) : 조회된 결과로부터 입력받은 size 만큼의 데이터를 리스트 형태로 반환
- Cursor.fetchall() : 조회된 결과 모두를 리스트 형태로 반환
- 사용방법
- 데이터베이스 연결
- 실제 파일을 이용 : con = sqlite3.connect("test.db")
- 메모리를 이용 : con = sqlite3.connect(":memory:")
- SQL 문 수행
- Connection 클래스의 Connection.cursor()로 Cursor 클래스에 연결
- Cursor.execute() 함수를 이용해서 SQL 문 수행 : cursor.execute("CREATE TABLE PhoneBook(index, Name, Phone Number);")
- 레코드 조회
- Cursor 클래스에서 직접 확인 : Cursor.execute("SELECT * FROM PhoneBook;")
- Cursor 클래스에서 fetch() 함수를 이용해서 확인 : Cursor.execute("SELECT * FROM PhoneBook;")
Cursor.fetchone() - 트랜젝션 처리
- Cursor.execute() 함수로 연결된 DB 수정 이후에 Connect.commit() 함수로 연결된 DB에 수정한 내용을 반영해주어야 함
- 자료형
- SQLite3 자료형과 그에 대응하는 파이썬의 자료형
SQLite3 자료형 파이썬 자료형 NULL None INTEGER int REAL float TEXT str BLOB buffer
- 운영체제 관련 기능
- os 모듈
- 운영체제에서 제공되는 기능을 함수로 정의한 모듈
- 임포트 방법 : from os import *
- 함수
- chdir(path) : 현재 작업 디렉토리에서 path 경로로 이동
- getcwd() : 현재 작업 디렉토리의 위치 반환
- access(path, mode) : path 경로의 파일 또는 디렉토리가 mode 로 설정한 작업이 가능하면 True 반환, 아니면 False 반환
- mode : F_OK - path에 파일 또는 디렉토리가 있는지 확인
- mode : R_OK - path에 파일 또는 디렉토리가 읽기 가능한지 확인
- mode : W_OK - path에 파일 또는 디렉토리가 쓰기 가능한지 확인
- mode : X_OK - path에 파일 또는 디렉토리가 실행 가능한지 확인
- listdir(path) : path에 존재하는 파일과 디렉토리를 리스트로 반환
- mkdir(path [, mode]) : path에 해당하는 디렉토리 생성
- makedirs(path [, mode]) : 인자로 전달된 디렉토리를 재귀적으로 생성, makedirs('test1/test2/test3') 이면, test1 -> test2 -> test3 순으로 생성
- remove(path), unlink(path) : path에 해당하는 파일를 삭제
- rmdir(path) : path에 해당하는 디렉토리를 삭제
- removedirs(path) : 디렉토리를 역순차적으로 삭제, removedirs('test1/test2/test3') 이면, test3 삭제 성공 -> test2 삭제 성공 -> test1 삭제
- rename(src, dst) : src를 dst로 이름을 변경하거나 이동
- utime(path, times) : path에 해당하는 파일에 대해서 액세스 시간과 수정 시간 등을 times로 수정
- system(command) : command를 실행, 성공하면 0을 반환
- sys 모듈
- system에서 제공되는 기능을 함수로 정의한 모듈
- 임포트 방법 : import sys
- 함수
- exc_info() : 현재 발생한 예외 정보를 튜플로 반환
- exit([arg]) : 프로세스를 종료
- 모듈
- sys.path : 모듈을 찾을 떄 참조하는 경로를 나타냄
- threading 모듈
- thread 란? 프로세스 내에서 실행되는 흐름의 단위를 의미하며 하나의 프로세스 내에 여러 개의 Thread가 동작할 수 있으며, 프로세스 내에는 반드시 한 개 이상의 Thread 가 동작하고 있음
- Thread 객체
- Thread를 사용하기 위해서 정의하는 객체
- 임포트 방법 : from threading import Thread
- 함수
- start() : Thread를 시작할 때 사용
- run() : Thread의 주요 동작을 정의, Thread 동작 시 실행되는 부분
- join([timeout]) : Thread가 종료되기를 기다림
- Lock 객체
- Thread 가 여러 개일 경우, 어느 Thread 가 먼저 실행되고 나중에 실행되는지 알 수 없어서 동작 전 Lock을 걸어 다른 Thread 가 동작하지 못하게 함
- 임포트 방법 : from threading import Lock
- 함수
- acquire() : Locked 상태로 바뀜, 다른 Thread 가 실행하지 못하게 함
- release() : Unlocked 상태로 바뀜, 다른 Thread 가 실행 가능
Python 입문
파이썬