반응형

Python3 str(문자열)의 편리한 기능들

작성 계기

C/C++을 사용하던 시작부터 프로그래머들 사이에서 유행한 말이 있었는데, 그것은 문자열 처리를 잘하는 프로그래머는 웬만한 프로그램을 거의다 해결할 수 있다는 말이었다. (하지만 영상처리를 해보면 어떨까?) 역시 기본에서 다루는 내용보다는 필자가 실제 프로그램을 작성하면서 유용했던 기능들 중심으로 정리를 한다.

str 자료형에 대해

C++ STL에서는 string 이라는 표준 클래스가 존재한다. 마찬가지로 python에서는 str 이라는 자료구조가 있다. 문장을 구성할때 문자 여러개가 모여서 구성을 하는 것이다. C/C++ 시절에는 사실상 문자의 배열로 운영이 되었기 때문에 사실 다루기 상당히 까다롭다. 하지만 수십년간의 프로그래머들의 경험에 의해서 문자 하나보다는 문장단위로 다루는 일이 많은 것을 겪어왔다. 그래서, C#, javascript, python 도 대부분 string 혹은 str 형을 기본적으로 제공하고 있다.

기본적으로 list 자료형과 비슷하지만 다르다. 이는 문자열을 다룰 필요한 메서드와 list 같은 배열형 자료를 다룰때 필요한 메서드에서 차이가 있기 때문이다. 사실 str의 경우 대부분 언어들에서는 비슷하게 지원을 해서 꼭 Python 만의 특징이라고 보기는 어렵다.

python str 자료형의 특징

문자열 비교

C/C++을 주로 사용한 사람이라면은 == 연산을 문자열에 바로 사용을 하면 기겁을 하게 될 것이다. 하지만, Python의 str 자료형은 사용해도 큰 문제가 없다. 이 기능이 워낙 강력하다 보니 오히려 enum 이라는 자료형을 잘 사용하지 않게 된다. python3에서 enum 자료형이 등장하게 된것은 3.5 버전 부터이고, 사용방법도 enum 내장 모듈을 class로 상속해서 사용을 하여 enum을 만들어서 사용하는 것 보다 문자열을 사용하는 것이 나을 수 도 있다. 하지만 IDLE의 인텔리전트 기능을 사용하기 위해서라면 enum을 사용하는 것이 더 편리하고 안전할 것이다.

예시)

'hello' == 'hello'
# True
'hello' == 'world'
# False

split() 특정 문자로 나누기

사실 문자열에서 특정 문자나 기호를 기준으로 정보를 나누는 것은 문자열을 다룰때 많이 다루게 된다. 대부분 프로그램들이 최소한 데이터를 다룰때 DBMA를 사용하지 않는 경우 바로 직접 파일을 다루는데, 이 때에 각 운영체제에서 파일의 경로를 '' 이나 '/' 을 사용하기 때문이다. 물론 현재는 크로스 플랫폼 이슈로 인해서 대부분 언어들은 파일경로를 다루는 모듈이 있다(C++의 경우 C++17부터 있다).
특정 문자로 나누는 메서드는 split()메서드이며, 첫번째 인자로 받은 문자을 기준으로 리스트형에 나눈 문자열들을 담아서 반환을 한다. 두번째 인자로 숫자가 들어갈 경우 입력받은 숫자만큼 첫번째로 입력 받은 문자열로 리스트에 나누어서 담은뒤 반환을 한다. 이 메서드는 웬만한 문자열을 다루는 프로그래밍 언어들에서 공통적으로 거의 있다.

예시)

'c\python3\hello'.split('\\')
# ['c', 'python3', 'hello']
'c\python3\hello'.split('\\', 1)
# ['c', 'python3\hello']

strip() 문자열의 양쪽에 특정 문자 제거

약간의 규모가 있는 프로그램을 작성하다 보면 설정값을 파일에 저장을 하고 이를 읽어서 사용하는 경우가 있는데, 이 경우 이 설정값이 있는 파일을 프로그램을 통해서만 건들면 되는데, 간혹 프로젝트 사정상 사용자가 옵션 파일을 건들여야 하는 경우가 있다. 특히 공백을 기준으로 문자열을 나누다 보면은 앞쪽이나 뒷쪽에 공백문이 저장되어 있는 경우가 발생된다. 이 경우 split() 메서드를 바로 사용하게 되면, 공백수 만큼 리스트의 길이가 생성된 것을 볼 수 있다.

물론 이를 제거하는 알고리즘을 구현하면 되지만 이런 경우가 생각보다 많다 보니 Python 에서는 아예 이러한 메서드를 제공한다. 단순히 strip()를 호출하면 문자열의 양끝단의 공백문을 제거하고 인자를 넣을 경우 해당 인자가 양끝에 있는 경우를 제거한다.

예시)

' hello world   '.strip()
# 'hello world'
'c:\python\hello\\'.strip('\\')
# 'c:\\python\\hello'

join() 문자열이 모인 리스트를 한 문자열로 만들기

split()과 반대 개념의 메서드로 join()을 호출한 문자열을 인자로 받는 리스트의 문자열들의 사이 사이에 넣어서 하나의 문자열을 반환을 한다. 여기서 사용되는 리스트의 원소는 모두다 str 자료형이어야 하는 제약이 있다(만약 이를 무시하면 에러메시지를 발생하면 죽는 프로그램을 볼 수 있다).

필자의 경우 파일에서 ','로 구분하는 문자열을 만들어야 할 때 많이 사용하였었다. 프로그램에서는 리스트에 숫치값을 넣어서 사용하다가 저장할때는 숫자가 아닌 문자열로 변환해서 저장하는 경우에 유용했다.

예시)

a = ['1', '2', '3', '4', '5']
aStr = ', '.join(a)
# aStr = '1, 2, 3, 4, 5'

보너스: 숫자 있는 리스트를 문자열형 리스트로 바꾸기

어떤 수치 데이터를 문자열로 변환하는 작업은 단순 반복 작업이다. 다행히 python에서는 이러한 단순 반복 작업을 간단하게 코드로 작성할 수 있는 문법적 특성이 존재한다.

예시)

a = [1, 2, 3, 4, 5]
aStrList = [str(it) for it in a]
# aStrList = ['1', '2', '3', '4', '5']

이렇게 join 메서드를 조합하면 단 2줄로 수치가 들어 있는 리스트를 하나의 문자열로 변환하는 것이 가능해진다.

문자열의 곱연산

리스트와 같은 기능으로 문자열로 곱연산이 가능하다. 콘솔용 프로그램을 만들 경우 구분 선을 사용할때 쉽게 사용하기도 한다.

예시)

a = '-'*80
# a = '--------------------------------------------------------------------------------'

format() 문자열 포맷

C 언어를 먼저 배울경우 printf() 함수를 써본적이 있을 것이다. 여기서 f의 의미는 format 이라는 의미이다. 실제로 문자열을 다루다 보면은 포멧이 있는 문자열을 작성하는 경우가 많다. 따라서 python도 str 자료형 자체에 format() 메서드를 지원한다. 다만, 이 메서드는 생긴지 얼마 안되었기 때문에 오래전에 구매한 기본서라면 format() 대신 % 기호를 이용해서 같은 비슷한 기능 사용할 수 있다. 하지만 가독성등 여러 이유로 가능하면 format() 메서드를 사용하기를 권장한다.

필자의 경우 프로그램에서 로그를 따로 저장할 경우 저장할 문자열 생성시 사용하기에 용이 했었다.

예시)

talk1 = 'hello, {}!'.format('lemi')
# talk1 = 'hello, lemi!'

in 포함 문자열 여부

C#의 contain()과 같은 역할을 하는 메서드로 문법상 굉장히 직관적이다. 예시로 이해하는 것이 매우 직관적이다.

예시)

'h' in 'hello'
# True
' ' in 'hello'
# False

find() 문자열 찾기

다른 프로그래밍 언어들에게 공통적으로 있는 것으로 처음으로 같은 문자열이 있는 index를 number(int)형으로 반환을 한다. 만약 없을 경우 -1을 반환한다. 인자는 단일 문자 혹은 문자열 전부 사용할 수 있다. 이 메서드로 특정 문자열 포함 여부도 확인이 가능하기 때문에 in 문법을 모를 경우 사용하게 된다.

하지만, find()로 포함 여부를 할 경우 이 의도를 주석으로 기록해주어야 하지만, 앞의 in의 문법을 사용하면 굳이 주석 없이 코드만으로 의도를 파악할 수 있으므로 포함 여부만 확인 할경우 find()보다는 in을 사용하는 것이 더 좋다.

예시)

index = 'hello'.find('l')
# index = 2
index = 'hello'.find(' ')
# index = -1

upper(), lower() 대소문자 변환

호출한 문자열을 upper()의 경우 대문자로 lower()는 소문자로 전부 변환하여 반환한다. 많이 쓰이는 기능은 아니지만, 검색 기능을 구현할 경우 대소문자 구분을 안 할 경우 사용시 편리하다. 그중에서도 가능하면 lower()를 많이 사용하는 편이다.

예시)

lowStr = 'hello'
upStr = lowStr.upper()
# lowStr = 'hello'
# upStr = 'HELLO'

기타 문자열을 다루는 더 강력한 방법

문자열로 부터 특정한 패턴의 의미있는 자료를 얻기 위해서는 정규표현식을 사용하는 것이 가장 효과적이다. 다만, 정규식을 사용하기 전에 간단한 문자열을 전처리과정으로 정리할 경우에는 가능하면 문자열에서 제공하는 메서드를 활용하는 것이 좋다.

반응형

'Python > Python3' 카테고리의 다른 글

[Python3]삼항연산자(Ternary operators)  (0) 2019.04.30
[python3]타입검사(Type Check)  (0) 2019.04.23
[Python3]List의 편리한 기능들  (0) 2019.04.19
[python]CSV 데이터 포멧 입출력  (0) 2018.10.22
[python]기본 Shell 활용  (0) 2018.10.20
반응형

Python3 List의 편리한 기능들

작성 계기

잠시 Python을 사용해본적은 있지만, 최근 프로젝트를 아예 Python을 사용하기 시작하면서 기존의 C++의 STL에서의 Vector와 많은 부부니 비교가 되었다. 특히, 알았을때와 몰랐을때의 생산성의 차이를 많이 느끼게 되었기 때문에 기록겸 정리를 해 놓았다. 본 내용들은 기본서에서는 잘 다루지는 않는 내용이지만, 그렇다고 어려운 것은 아니다.

List의 구조

기본적으로 C++ STL의 Vector와 거의 비슷한다. 배열처럼 사용이 가능하며, 동적으로 길이를 늘리고 줄일 수 가 있다. 하지만, 경험에 의한 것인지 좀 더 편리한 기능들이 많이 있다. 그리고 정적 언어와 달리 List는 특정한 자료형을 구분 하지 않고 담을 수가 있다. 물론 C++에서도 포인터를 이용하면 구현을 할 수 있겠지만, 별로 추천하는 방법은 아니다.

Python의 List의 특징

여기서는 주로 다른 프로그램 언어에서 보기 힘든 Python의 List의 특징을 작성하겠다.

원소를 포함한 비교 연산이 가능함

Python의 str 구조도 마찬가지이지만 C/C++ 언어에서는 문자열 두개를 비교할때 각 문자의 길이 하나하나를 비교를 해서 같아야만 같은 문자열로 판단하는 알고리즘을 메서드로 구현해서 판단을 해야 한다. Python의 경우 이러한 비교 연산을 위한 Hash라는 값을 인스턴스 혹은 객체를 생성할때 만들어 놓는데, 이 숫자가 같은지만 비교를 하여 비교연산에 소모되는 연산량을 줄였다. 클래스의 Hash에 대해서 자료를 찾아보면 자세한 내용을 알 수 있다.

예시)

a = [1, 'hello', 2]
b = [2, 'hello', 1]
c = [1, 'hello', 2]
a == b
# False
a == c
# True

위의 예시 코드를 Python idle shell에서 실행해서 간단히 확인 할 수 있다.

곱연산으로 반복적인 원소 채우기

Python에서 특이한 기능중 하나로 원소가 있는 리스트와 숫자를 곱 연산 할경우 해당 리스트를 반복적으로 숫자만큼 채우는 것이 가능하다. 이 기능은 Python의 기본 문자열 자료형인 str에서도 나타나는 특징이다.

예시)

a = [1, 2]*3
# a = [1, 2, 1, 2, 1, 2]

예시 코드를 Python idle shell에서 확인 해보면 된다.

원소를 배분

Python에서 가장 두드러지는 문법 중 하나로 배열의 길이 만큼 객체명을 좌항에 작성을 하면 우항에 그 크기에 많은 리스트를 놓으면 각 원소를 순서대로 대입이 되는 특징이 있다. 필자의 경우 이러한 특징을 곱연산의 특징과 응용해서 여려개의 객체명을 초기화 해야 할 경우에 간단하게 사용하곤 한다.

예시)

a1, a2, a3 = [None]*3
# a1 = None
# a2 = None
# a3 = None

예시 코드를 Python idle shell에서 확인 해보면 된다.

단, List의 길이와 좌항의 변수의 길이가 안 맞을 경우 에러가 생기기 때문에 일반화 방식으로 작성할 경우 개수를 검사하는 로직을 미리 추가 해주는 것이 좋다.

간단한 index 로 나누어 대입

이 기능은 다른 언어에서도 있기는 하지만, Python에서 문법적으로 간결하게 제공을 하고 있다. ':'을 대괄호 안에서 사용하여 범위를 자를 수 있다. 필자의 경우 특정 2차원 배열을 1차원 배열에 넣고 관리할때 응용해서 사용하기도 한다.

예시)

a = [1, 2, 3, 4, 5]
b = a[2:]
# b = [3, 4, 5]
c = a[:3]
# c = [1, 2, 3]

index는 많이 헷깔리는 경우가 있는데, python은 친 인간 언어적인 편이라서 사람이 일반적으로 세는 방식으로 자른다. 그러나 전통적인 배열로 사용할 경우에는 0부터 시작한다.

리스트간 병합(Merrge)

List를 초기 정의한 이후 원소를 추가를 할 때 일반적으로 append와 같은 C++의 STL 경우 push 메서드를 호출해서 한쪽으로 하나씩 넣는게 일반적이다. 그러나 List의 연산자 + 혹은 +=을 사용하면 리스트를 동등하게 머지하는 결과를 나타낸다. append와 비슷해 보이나 다른 방식이기 때문에 주의해야 한다.

예시)

a = [1, 2]
b = [3, 4]
c = a + b
# c = [1, 2, 3, 4]

리스트 컴프리헨션(Comprehensions)

공식 문서에서는 간단하게 리스트를 만드는 방법이라고 소개를 하고 있다. 이터러블의 멤버들에게 특정 연산을 사용하는 경우에 응용이 가능하다. 가장 쉽게 응용이 가능한 것은 기존에 어떤 수치 리스트를 파일에 저장하기 위해서 문자형으로 바꾸거나 혹은 반대로 어떤 파일을 읽어서 숫자로 된 리스트를 수치형 자료로 변경할 경우에 응용하면 편한 기능이다. 이 방법을 몰라도 형 변환은 못 하는 것은 아니다. 다만, 간결하고 편할 뿐이다.
예시)

squaresSrc = [1, 4, 8, 16]
squaresDst = [str(it) for it in squaresSrc]
# squaresDst = ['1', '4', '8', '16']

그리고 여기서 더 나아가 컴프리헨션을 통해 중첩과 if문을 응용이 가능하다. 여기서 중첩을 할 경우에는 실제 코드에서 2중 for 문을 사용한 것과 같다. 컴프리헨션에서는 실행되는 순서는 첫 for문 부터 읽어서 가장 마지막에 앞에 있는 연산을 수행한다.

예시)공식 문서 예제

>>>[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

이러한 기능은 편리하지만, 자신이 협업 혹은 유지보수하는 인력 수준에 따라서 중첩 혹은 if문이 추가된 방식에 대해서 가독성이 떨어진다면, 가능하면 사용을 자제하는 것이 좋을 것 같다.

기타 기본적인 재배열(sort) 관련 메서드

List가 선언된 객체에 자체적으로 오름차순과 내림차순으로 재배열할 경우 sort(), 그리고 현재 배열된 원소를 역으로 배열할 경우 reverse()를 기본적으로 지원을 한다. 또한 sort()의 경우 입력인자로는 정해진 flag를 넣어서 방식의 조절이 가능하다. 다만, 이 메서들을 사용시 주의해야 할 점은 List 객체 자체를 바꿔버리기 때문에 재배열을 하기 전의 데이터를 보존을 해야한다면, 깊은 복사를 하고 나서 해야한다는 단점이 있다.

이후 추가로 편의성 기준으로 정리가 필요하면 후에라도 추가를 하도록 하겠다.

참조자료

스택오브 플로워: list str to int

반응형
반응형

[python]CSV 데이터 포멧 입출력

CSV데이터

CSV(Comma Separated Values)데이터를 처음 접할때 엑셀에서 지원되는 포멧이기 때문에 처음에는 엑셀파일로 아는 경우가 많다. 그러나 실제로는 콤마를 기준으로 데이터를 구분하는 형식이라 볼 수 있다. 이는 CSV의 원 뜻만 확인해도 알 수 있다.

기본적으로 문자열 형태로 저장되기 때문에 문자열 처리에 자신이 있다면 쉽게 csv데이터를 만드는 것과 읽는 것을 하기에는 간단한 편이지만, 간단한 만큼 ','(콤마)가 들어있는 데이터에 대해서는 구분이 잘 안된다. 그리고 이러한 문제가 데이터 오염이라고 말을 한다.

물론 콤마를 데이터안에 반드시 입력을 해야 할 경우에는 "따옴표로 감싸주는 방법이 있다. 그러나 데이터에 다시 따옴표가 들어가야 할 경우 상황이 복잡해지게 된다. 가능하면 간단한 데이터 그중에서도 수치 데이터에 사용하기를 권장한다. 그외에 복잡한 데이터의 경우 다른 형태의 포멧을 사용하길 권장한다.


파이썬에서 CSV

본 예시는 '파이썬 프로그래밍으로 지루한 작업 자동화하기'서적의 예시를 참조하였다.

csv파일 읽기

수학자들의 사랑을 받는 파이썬은 최근에는 CSV 모듈이 자체적으로 내장이 되어 있다. (물론 문자열처리에 자신이 있다면 직접 구현해도 상관없지만, 굳이 바퀴를 재 발명할 필요는 없다.) 따라서 추가로 모듈을 다운로드 설치 과정 없이 import해서 사용할 수 있다. 사용방법은 csv파일을 open한뒤에 csv모듈의 reader 객체를 생성하여서 읽을 수 있다. 이때 읽어진 데이터는 리스트 형식으로 읽어진다.

 여기서 주목해야 할 점은 읽어진 모든 데이터는 문자열로 읽어진다는 점이다. 만약 수치를 처리하고 싶다면 수치형으로 형전환을 해야 한다.


예시1)

>>>import csv
>>>exampleFile = open('example.csv')
>>>exampleReader = csv.reader(exampleFile)
>>>exampleData = list(exampleReader)




csv파일 쓰기

반대로 csv 파일로 쓸경우에는 csv모듈의 writer객체를 생성하고 파일open객체를 연결시켜줘야 쓸 수 있다. 단, open시 줄바꿈 옵션을 제거(newline='')해야 한다. 이는 csv모듈에서 한줄씩 작성될때 마지막에 줄바꿈으로 구분하기 때문이다.


예시2)

import csv
>>>outputFile = open('output.csv', 'w', newline='')
>>>outputWrite = csv.writer(outputFile)
>>>outputWrite.writerow(['spam', 'eggs', 'bacon', 'ham'])
>>>outputWrite.writerow(['hello, world!', 'eggs', 'bacon', 'ham'])
>>>outputWrite.writerow([1, 2, 3.141592, 4])
>>>outputFile.close()


예시에서 hello, world 부분을 csv파일을 다른 편집기로 열어보면 ""으로 감싸진 것을 확인할 수 있다.



생각해 볼 점

만약 데이터가 안들어 있는 빈경우에는 csv를 편집기로 열어서 확인할 경우 콤마(,)만 있는 것을 확인할 수 있다. 이 경우 읽게되면 문자열 형식으로 읽기 때문에 ''(빈문자) 형태로 읽어진다.

 또한 csv의 파일의 에러를 확인하는 방법으로 콤마의 개수를 확인하는 방식이기 때문에 파일이 깨진경우(혹은 데이터 오염) 대부분 콤마의 개수가 안맞는 경우이다.


참고자료

서적, 파이썬 프로그래밍으로 지루한 작업 자동화하기



반응형
반응형

[python]기본 Shell 활용

파이썬의 IDE와 Shell

 파이썬으로 본격적으로 개발을 한다면은 사실 파이참(PyCharm) 같은 IDE(통합개발환경) 툴을 사용 하는 것이 좋다. 다른 IDE처럼 문법 검사 등 개발 시간을 단축시켜주는 많은 보조 기능들이 제공이 되기 때문이다. 과거에는 명필은 붓을 탓하지 않는 다는 말이 있다.


 그러나 오늘날은 도구의 성능의 영향이 확실히 크다. 그러나 초보자 혹은 상황이 여의치 않을 경우에는 파이썬을 설치할때 기본적으로 제공되는 IDE도 상당한 도움이 된다. 특히, Shell은 간단하게 테스트 할때 많은 도움이 된다.


Python Shell의 활용

 기본적으로 Windows PowerShell 이나 CMD 그리고 유닉스 계열의 bash shell 에서 파이썬을 설치한 다음에 python(혹은 python3)만 입력할 경우 보이는 >>>이 보이는 화면이 파이썬 Shell이다. 여기에서는 한 줄씩 JS(자바스크립트)처럼 코드 입력후 실행을 해볼 수 있다. 반면 GUI에 제공되는 Shell의 경우 같이 설치된 IDLE를 실행하면 파이썬에서 제공하는 Shell을 확인할 수 있다.


 이러한 기능은 모듈을 테스트하거나 간단한 코드의 결과를 확인할 때 유용하다. 이러한 기능은 개발을 단축시키는데에 도움이 된다. 특히 GUI에 제공되는 Shell의 경우 전용 단축키와 기능들이 제공이 되기 때문에 운영체제에서 제공되는 Shell에서 실행하는 것보다 더 편리한 편이다.


주요 단축키

 주요 단축키의 경우 Options -> Configure IDLE 를 선택하여 나온 화면의 Key 탭에서 변경이 가능하다. 많은 단축키들이 있고 이를 자신의 입맛대로 수정을 할 수 있다. (그러나 정해진 표준이 없다면, 가능하면 수정을 하지 않는 것을 권장한다) 그리고 기본적으로 자주 사용하는 단축키를 적어 놓는다.


윈도우 기준

Shell 재시작 : Ctrl + F6

이전 줄 코드 읽어 오기(이전으로) : Alt + p

이전 줄 코드 읽어 오기(최근으로) : Alt + n

되돌리기 : Ctrl + Shift + z

자동완성 : tab


 그 외 기본적으로 동일하게 사용되는 기능은 오려두기, 복사, 붙여넣기, 문장 맨앞으로, 문장 맨뒤로는 굳이 외우지 않아도 잘 알기 때문에 생략을 한다.

반응형
반응형

[python] 버전에 대한 논의와 라이브러리 설치

버전에 대한 (의미없는) 논쟁

 필자가 처음 파이썬을 접하게 된것은 기록시점으로부터 약 4년전인 2014년 말 혹은 2015년 초 쯤 이었다. 당시 필자는 순수 물리학으로 졸업해서 대학원을 컴퓨터 공학으로 전과 지원을 해서 공부를 했기 때문에 이제 막 C/C++와 자료구조를 한참 익히고 있을 때였다.


 그러던 중 멀티미디어 강의를 하고 있던 선배의 부탁으로 실습준비를 도와주면서 파이썬을 처음으로 접하게 되었다. 당시 python3.1이 나오던 시기였기 때문에 대부분 자료는 python2.7을 기준으로 하는 자료가 많았다. 게다가 대부분읜 자료는 윈도우보다는 리눅스나 OS X 기반환경에 대한 설명이 주를 이루었었다. 이는 당시 윈도우 환경에서는 오류가 나는 일이 많았던 것으로 기억이 난다.


 때문에 당시에 규모 있는 커뮤니티에서 2.7 버전과 3.x 버전 중 어느 버전을 사용해야 하느냐는 질문이 나오면 2.x 버전을 사용하는 사람을 게으름뱅이(?)로 취급하는 사람들도 꽤 있었기 때문에 논쟁이 격해지기도 했는데, 의미가 없는 짓이다. 일단 당시 수치계산에 중요한 numpy 라는 라이브러리가 아직 3.x를 완벽하게 지원되지 않았기 때문에 이는 자신이 하려는 일에 지원이 되는지 여부를 확인하고 선택해야 한다.


 물론 지금은 시간이 많이 지나서 기존 2.7에서 지원되는 라이브러리가 3.x에서도 많이 되는것 같다. 특히 pip 같은 라이브러리 관리 툴의 경우 윈도우 환경에서 사용하기 위해서는 별도로 설치 방법을 찾아서 설치를 해주었어야 했으나 지금은 Python 설치시 같이 설치가 된다.



라이브러리 설치

 라이브러리 설치는 이미 Python이 설치되어 있다는 전제하에서 진행을 한다.

 라이브러리를 설치하는 방법은 직접 파일을 다운로드 받아서 설치하는 방법이 있지만, 오프라인 환경에서 작업해야 하는 것이 아닌 이상 pip를 통해서 설치하면 된다. 만약 python2.7 과 python3.x를 같이 혼용해서 사용한다면, -m 옵션을 사용해서 명령어를 실행하면 된다.


예시로 numpy를 설치한다.


# 한가지 버전만 사용하는 경우
pip install numpy

# 두가지 버전을 같이 사용하는 경우 만약 3.x의 경우
python3 -m pip install numpy


 위의 명령어를 powershell 이나 cmd 창에서 실행하면 된다. MS에서는 최근 powershell을 밀고 있으니 powershell을 사용하는 것도 권장한다.

 만약 opencv를 설치할 경우에도 pip를 통해서 설치가 가능하다. 과거에는 python 패키지 관리격인 anaconda를 통해서 설치가 가능했지만, 필자가 이 글을 적는 시점에 확인한 결과 opencv도 설치가 가능했다.


# OpenCV 를 설치하는 경우
# 여기서 matplotlib는 그래프 같은 새창을 띄울때 사용되는 라이브러리이다
python3 -m pip install matplotlib opencv-python

# python3 인터프리터를 호출한후 라이브러리 호출을 확인한다
>>>import cv2
>>>print(cv2.__version__)


대부분 설치 확인을 이미지를 띄워보지만, 버전만 확인해봐도 호출이 제대로 되는지 확인이 된다.


 위의 방식으로 설치할 경우 버전이 최신으로 설치가 되니 버전을 선택을 하고 싶다면, 버전도 추가로 입력을 해줘야 한다. 이처럼 과거보다 python 프로그램의 진입장벽이 많이 낮아 진것이 체감된다. 특히 OpenCV의 경우 C++로 개발하는 것이 아니라면, 이제는 소스를 받아서 CMake로 메타 빌드까지 안해도 되는 시대가 되었다.


참조자료

python opencv 설치 방법



반응형

'Python > Python3' 카테고리의 다른 글

[python3]타입검사(Type Check)  (0) 2019.04.23
[Python3]Str(문자열)의 편리한 기능들  (0) 2019.04.20
[Python3]List의 편리한 기능들  (0) 2019.04.19
[python]CSV 데이터 포멧 입출력  (0) 2018.10.22
[python]기본 Shell 활용  (0) 2018.10.20

+ Recent posts