입출력¶
입출력은 여러 가지 형식으로 가능합니다.
input()
¶
input([입력시 표시될 문자열(옵션)])
함수를 이용해서 키보드로부터
문자열을 입력받을 수 있습니다.
>>> num = input('입력하세요:')
입력하세요:123 문자
>>> print('num = ', num)
num = 123 문자
입력된 문자열을 원하는 객체로 변경하려면 문자열 객체 메소드
split()
을 이용합니다. 다음과 같이 문자열 12 34 문자
를
입력받는다.
입력 = input('입력하세요:')
입력하세요:12 34 문자
입력 문자열을 공백 문자를 구분으로 리스트로 저장합니다.
문자열 = 입력.split()
print(문자열)
['12', '34', '문자']
리스트 축약을 이용해 숫자형 문자열만 숫자로 변환하고 연산을 해본다.
ㅅ, ㅜ = [int(수) for 수 in 문자열[:2]]
print("{} + {} = {}".format(ㅅ, ㅜ, ㅅ + ㅜ))
12 + 34 = 46
print()
¶
print(객체)
함수는 키워드인자가 아닌 모든 인자들을 str(객체)
함수를 이용해서
변환된 것을 출력합니다. 여러 객체를 출력하기 위해서는 쉼표로 구분해서
나열하면 된다.
print('한글과', '컴퓨터의', '만남')
한글과 컴퓨터의 만남
기본적으로 각 객체 사이를 공백 문자를 넣어서 출력합니다. 출력할 때 출력
객체 사이에 들어갈 문자열을 sep
옵션을 이용해 지정할 수 있습니다. 다음은
각 문자열 객체 사이에 ***
를 삽입하고 있습니다.
print('한글과', '컴퓨터의', '만남', sep='***')
한글과***컴퓨터의***만남
다음은 구분 문자로 쉼표와 공백 문자를 넣어서 출력한 것입니다.
print('하나', '둘', '셋', sep=', ')
하나, 둘, 셋
출력 문자열 끝을 end=
옵션을 이용해 바꿀 수 있습니다. 기본값은
end=\n
입니다.
print('한글', end='의 \n')
print('우수성', end='')
한글의
우수성
str()
¶
str(객체)
함수는 객체.__str__()
메소드를 실행합니다. 만일 객체
가
__str__()
메소드를 구현하지 않았다면 repr(객체)
를 실행합니다.
다음과 같이 사람
클래스를 만들고 길동
객체를 만들어
print(길동)
을 해봅니다.
class 사람:
def __init__(self, 이름=None, 성별=None):
self.이름 = 이름
self.성별 = 성별
길동 = 사람('홍길동', '남')
print(길동)
<__main__.사람 object at 0x000001D86B09E898>
길동.__str__()
메소드가 구현되어 있지 않기 때문에 repr(길동)
을
실행하게 된다.
repr(길동)
'<__main__.사람 object at 0x000001D86B09E898>'
print(길동)
과 같은 결과가 나오는 것을 알 수 있습니다. 다음은 사람
클래스에 __str__()
메소드를 정의한 것입니다.
class 사람:
def __init__(self, 이름=None, 성별=None):
self.이름 = 이름
self.성별 = 성별
def __str__(self):
return '이름:{}, 성별:{}'.format(self.이름, self.성별)
길동 = 사람('홍길동', '남')
print(길동)
이름:홍길동, 성별:남
print(길동)
의 결과는 print(길동.__str__())
를 실행한 것과
같은 결과가 나오는 것을 알 수 있습니다.
print(길동.__str__())
이름:홍길동, 성별:남
즉, __str_()
메소드가 구현되어 있으면 이것을 사용하는 것을 알 수
있습니다.
repr()
¶
repr(객체)는
문자열을 반환합니다. repr(객체)
는 객체.__repr()__
메소드를
실행합니다. 객체
가 __repr()__
메소드를 구현하지 않았다면
기본적으로 객체
의 "<타입 이름 메모리 주소>"
와 같은 정보가
출력된다. 대부분 __repr()__
메소드는,
eval(repr(객체))
함수를 실행했을 때 원하는 결과가 나오도록 만듭니다.
사람
클래스를 이용해서 살펴봅니다. 길동
객체를 출력해봅니다.
class 사람:
def __init__(self, 이름=None, 성별=None):
self.이름 = 이름
self.성별 = 성별
길동 = 사람('홍길동', '남')
print(길동)
<__main__.사람 object at 0x000001D86B09E4E0>
사람
클래스는 __str__()
메소드가 없기 때문에 repr(길동)
을
실행할 것이고, repr(길동)
은 길동.__repr__()
메소드를
실행하려고 하는데 __repr__()
메소드가 구현되어있지 않기 때문에
기본적인 정보인 타입 이름과 메모리 주소
정보가 출력 된다. 다음과
같이 __repr__()
메소드를 구현해봅니다.
class 사람:
def __init__(self, 이름=None, 성별=None):
self.이름 = 이름
self.성별 = 성별
def __repr__(self):
return '이름은 "{}"이고 성별은 "{}"입니다.'.format(self.이름, self.성별)
길동 = 사람('홍길동', '남')
print(길동)
이름은 "홍길동"이고 성별은 "남"입니다.
print(길동)
을 실행하면 길동.__str__()
메소드를 실행하려고
하는데 구현되어 있지 않으므로 repr(길동)
을 실행하게 된다. 즉,
길동.__repr__()
메소드를 실행합니다.
데이터베이스¶
sqlite3¶
sqlite3에서 정규표현식을 사용하려면 내부 함수를 정의하고 시작해야 합니다.
In [1]: import sqlite3
...: import re
...:
regexp 함수를 정의합니다. 첫번째 매개변수는 정규표현식 패턴이고 두번째 매개변수는 검색할 문자열입니다. 반환값은 논리형입니다.
In [2]: def regexp(patt, item):
...: return re.search(patt, item) is not None
...:
디비를 접속하고 내부 함수를 정의합니다. create_function의 첫번째 매개변수는 함수 이름이고 두번째 매개변수는 인자의 갯수, 세번째는 실제 정의된 함수를 대입합니다.
In [3]: conn = sqlite3.connect(':memory:')
...: conn.create_function("regexp", 2, regexp)
...:
In [4]: cur = conn.execute("select * from table_name where regexp('\d{2}', field_name)")
...: cur.fetchall()
...: conn.close()
...: