임베디드 프로그래밍을 하다 보면 레지스터 등의 설정을 2의 보수로 해야 하는 경우가 많이 있습니다. int 값을 2의 보수 헥사값으로 표현하거나 또는 2의 보수 헥사 값으로부터 int 값을 구하는 경우 저는 주로 Python bitstring 모듈을 사용하곤 합니다.

대부분의 파이썬 모듈이 그렇듯이 bitstring 모듈 역시도 pip를 통해 아래와 같이 설치할 수 있습니다.

pip install bitstring

사용은 아래와 같이 bitstring 모듈을 import 를 하고~

from bitstring import Bits

헥사값을 넣어 줍니다.

num = Bits(hex="FFD856")

int 값을 구하기 위해서는 int 멤버 변수 값을 확인하면 되고 아래 예를 보면 -10154 임을 알 수 있습니다.

hex 값을 구하기 위해서는 hex 멤버 변수 값을 확인하면 ffd856 임을 알 수 있고~ bin 값을 구하기 위해서는 bin 멤버 변수 값을 확인하면 "111111111101100001010110' 임을 알 수 있습니다.



요즘 대부분의 컴퓨터는 64비트 OS를 사용하고 있습니다. 저는 시스템 트레이딩을 하기 위해서 파이썬을 사용하고 있습니다. 제가 사용하는 이베스트 증권사에서는 xingAPI라고 하는 시스템 트레이딩 API를 제공해 주고 해당 프로그램을 사용하기 위해서는 파이썬 32비트 버전을 사용해야 합니다.

시스템 트레이딩에 32비트 파이썬이 필요하다고 해서 32비트 파이썬을 따로 설치하는 것은 조금 불편할 것입니다. 딥러닝 등에도 사용을 하므로 64bit 파이썬을 설치하고 추가로 32비트 환경도 설치하는 것이 바람직한 것으로 보입니다.

아래 포스팅에서 구글 텐서플로우 라이브러리를 사용하기 위하여 다른 파이썬 버전을 설치하는 방법을 소개한 적이 있습니다.

https://iamaman.tistory.com/2018

저는 주로 아나콘다를 설치해서 사용하고 있고 아나콘다를 사용하면 64비트 파이썬이 설치된 환경에서 다른 버전 또는 다른 비트의 파이썬 환경을 만들 수가 있습니다.

현재 제 컴퓨터는 윈도우 64비트이고 파이썬은 3.6, 64비트 버전이 설치가 되어 있습니다. 관리자 권한으로 cmd 또는 파워쉘을 실행한 이후에 아래와 같이 명령어를 작성해주면 32bit 파이썬이 추가로 설치가 됩니다.

set CONDA_FORCE_32BIT=1

conda create -n py36_32 python=3.6 anaconda

activate py36_32

새롭게 설치된 32비트 파이썬은 아나콘다가 설치된 파이썬 폴더 아래의 envs 폴더 이하에 설치 됩니다.

C:\Anaconda3\envs\py36_32\python.exe

향후 32비트 파이썬을 다시 사용하기 위해서는 이 주소의 실행 파일을 사용하시면 됩니다.



Binary 파일에 대해 파싱을 해야 하는 일이 있어서 Python 을 사용하여 binary 파일을 읽고 ~ 해당 값을 hex 형태로 나타내는 코드입니다.

기존에 대부분 텍스트 파일 처리만 주로 했었고 binary 파일을 다룰 일은 별로 없었는데 … 역시 파이썬은 정말 간편한듯 하네요. 너무 좋아~


if __name__ == '__main__':

with open('data.elf', mode='rb') as file:

binaryData = file.read()

binaryDataString = ["{:02x}".format(x) for x in binaryData]

print(binaryDataString)


다행히도 바이너리 파일이 그리 크지 않아서 한번에 읽어들여서 간단하게 처리되는데 아래와 같이 hex 값이 나오네~



요즘 딥러닝 관련 책을 보면서 공부를 하고 있는데 형태소분석에 대해서 알게 됐고, 파이썬에서 KoNLPy 모듈을 사용하면 정태수 분석을 할 수 있다는 것을 알게 되었습니다.

KoNLPy 의 설치 방법은 아래 주소에서 확인할 수 있습니다.

http://konlpy.readthedocs.io/ko/v0.4.0/install/#id2

현재 저는 아나콘다로 파이썬을 설치한 상태고 자바는 이미 설치가 된 상태입니다.

따라서 KoNLPy 만 설치하면 돼 거라고 생각을 해서 아래와 같이 KoNLPy 를 설치했습니다.

현재 제 컴퓨터에 환경은 Windows 7 64비트 이고 파이썬 아나콘다 3.6 버전입니다.



pip install KoNLPy

다음으로 JPype1 를 설치해 하더군요. 아래 주소에서 제 컴퓨터에 맞는 버전을 설치하였습니다.

https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype

64비트 윈도우에 파이썬 3.6 버전이므로 JPype1‑0.6.3‑cp36‑cp36m‑win_amd64.whl 파일을 다운로드 해서 아래 명령어를 통해서 설치했습니다.

pip install JPype1‑0.6.3‑cp36‑cp36m‑win_amd64.whl

이제 잘 될 거라고 생각을 하고 아래 예제를 돌려보니~

from konlpy.tag import Twitter


if __name__ =='__main__':

    twitter = Twitter()

    malist = twitter.pos("형태소 분석 하고싶어요.", norm=True, stem=True)

    print(malist)


또 ~~ 에러가 나더군요. numpy 모듈 관련한 에러 같아서 검색을 조금 해 보니 최신 버전으로 업데이트 해야 되는 것 같더군요. 그래서 아래 명령어를 실행해서 numpy 를 업데이트 했습니다.

pip install numpy --upgrade

이제 다시 위 파이썬 코드를 돌려보니 아래와 같이 형태소 분석이 정상적으로 되는 것을 확인할 수 있었습니다.

[('형태소', 'Noun'), ('분석', 'Noun'), ('하다', 'Verb'), ('.', 'Punctuation')]

역시 소프트웨어 개발은 환경 설정 뻘짓이 반인것 같습니다.



아래 포스팅에서 Synology NAS 에 pip 설치하는 방법에 대해 설명한 적이 있는데, 오늘은 Python3 와 pip 를 설치하는 방법에 대해 소개하려 합니다.

http://iamaman.tistory.com/1887

일단 Synology NAS 에 Python3 를 설치하는 방법은 매우 간단합니다. Synology NAS 패키지 센터에서 아래와 같이 Python 으로 검색을 해서 Python3 를 설치하시면 됩니다.

다음으로 pip 를 설치하는 방법은 ssh 로 Synology NAS 에 접속한 다음 아래와 코딩하시면 됩니다.

sudo -i # root 사용자 변경

wget https://bootstrap.pypa.io/get-pip.py # get-pip.py 다운로드

python3 get-pip.py # pip 설치

python3 -m pip install requests # requests 설치

python3 -m pip install selenium # selenium 설치

su - 유저명   # 사용자 변경



프로그래밍시 데이터들로부터 빈도를 측정하는 것은 매우 자주 있는 일 입니다. 이런 경우 프로그래밍언어에 따라서 다르 긴 하지만 hash 또는 dictionary 형태의 변수를 활용하여 데이터에 따른 빈도를 Count 할 수 있습니다.

저는 요즘 증권사 API를 사용해 보고 있고 주로 Python 을 많이 활용하는데 아래 주소에서 Counter() 에 대한 설명이 자세히 나와 있더군요.

https://data-flair.training/blogs/python-counter/

아래 코드와 같이 너무나 간단하게 데이터의 빈도를 세고 빈도 횟수에 따라 정렬하는 등의 작업을 할 수 있습니다. for 문 등을 사용하여 iteration 을 하고 싶은 경우 dict() 를 통해 dictionary 로 만든 후에 사용 할 수 있더군요. 아무튼 굉장히 편리 할 것 같습니다.

from collections import Counter


c=Counter(['a','b','c','a','b','a'])

print(c)

print(c['a'])

print(c.most_common())

for key,val in dict(c).items():

    print(key, val)

위 코드의 실행 결과는 아래와 같습니다.

Counter({'a': 3, 'b': 2, 'c': 1})

3

[('a', 3), ('b', 2), ('c', 1)]

('a', 3)

('b', 2)

('c', 1)



저는 시스템 트레이딩에 관심이 있어서 이베스트증권의 xingAPI 를사용해 보고 있습니다. 아직 제대로 된 로직을 완성한 것은 아니지만 생각나는 아이디어들을 코딩 해 보고 있습니다. 시스템 트레이딩을 이용하여 주식 투자를 하기 위해서는 호가를 계산할 수 있어야 합니다. 아래는 미래에셋증권 홈페이지에서 가져온 우리나라 주식 시장의 호가 가격 단위 입니다.

https://www.miraeassetdaewoo.com/hki/hki3061/n65.do

호가 가격 단위를 알아야 거래 하고자 하는 가격을 지정할 수 있고 주문을 넣을 수 있습니다. 물론 시장가로 주문을 한다면 거래 수량만 정하면 되기 때문에 이때는 필요 없을 겁니다. 호가 가격은 지정가 주문 거래시 꼭 필요한 정보입니다. 위에 표를 보시면 아시겠지만 거래소인지 코스닥인지, 기존가에 따라 호가 가격 단위가 달라집니다.

저는 현재 파이썬을 이용하고 있고, 호가를 계산하는 코드는 아래와 같습니다.

사용 방법은 위에 코드에 나와 있는 것처럼 다음과 같이 입력하면 됩니다.

hogaPriceReturn(기준가, 원하는 것과, 'kosdaq' or ‘kospi’)

ex) 코스닥, 현재가가 1만원인데 -2 호가의 가격, hogaPriceReturn(10000, -2, 'kosdaq')

위 코드를 돌려 보면 9980 이라는 결과를 얻을 수 있습니다.



아래 포스팅에서 파이썬에서 클립보드를 사용하기 위해서 pyperclip 모듈을 사용한다고 소개를 한 적이 있습니다. 최근에 저는 파이썬 2.7 버전에서 파이썬 3 점대 버전으로 갈아 타고 있는데 pyperclip 모듈이 정상적으로 동작을 하지 않더군요. 확인을 해보니 파이썬 3 버전에서는 함수명들이 약간 달라졌습니다. pyperclip 모듈이 설치가 안 된 경우 아래 글을 참조해서 설치하시기 바랍니다.

http://iamaman.tistory.com/1256

클립보드로부터 내용을 가져 오고 싶을 때는 paste() 함수를 사용하고 클립보드의 내용을 넣고 싶은 경우 copy() 함수를 사용합니다.

예제는 다음과 같습니다.

현재 제 컴퓨터의 클립보드에는 ‘Clipboard Contents’ 라는 내용이 들어 있습니다. 따라서 clipboardContent라는 변수에 ‘Clipboard Contents’ 라는 글자가 들어가게 되고~

위의 코드를 실행한 후에~ 메모장에 Ctrl + V를 해서 붙여넣기를 해보면 다음과 같이 들어가는 것을 확인할 수 있습니다.



저는 증권사 API를 사용하여 매일 기관 외국인 10억이상 순매수 종목에 대해서 검색을 수행하고 있습니다. 프로그래밍 언어로 Python 을 사용하고 있고, API 로 부터 추출된 종목 리스트를 전일비 상하락율에 따라 정렬을 해서 포스팅을 합니다.

이에 대한 예제는 아래와 같습니다. 예로 든 category 데이터에서 3 번째 인덱스 값이 전일 대비 상하락율입니다. 해당 인덱스에 따라서 전체 데이터가 정렬 되도록 하기 위해서 operator 모듈의 itemgetter를 사용합니다. itemgetter 에 3 이라는 정렬의 기준이 되는 인덱스 값을 넣어 줍니다. 기본 정열은 오름차순입니다.




내림차순으로 정열을 하고 싶은 경우에는 reverse 옵션을 True 로 설정하면 됩니다.

3 번째 인덱스가 첫 번째 정렬 조건이고 4 번째 인덱스가 두 번째 정렬 조건이라고 한다면 itemgetter(3, 4) 와 같이 순서대로 기준이 되는 인덱스를 넣어 주면 됩니다.

위 코드를 실행해 보면 아래와 같은 결과를 확인할 수 있습니다.



요즘 웹 서핑을 하다 보면 Javascript 로 된 괜찮은 소스코드들이 눈에 띄더군요.


이런 Javascript 코드 들을 PC 에서 실행하기 위해서는 보통 nodejs 를 설치해서 사용하곤 하는데~


오늘은 Python 에서 Javascript 를 실행시키는 방법에 대해 소개하려 합니다. 


Python에서 Javascript 코드 실행을 위해서는 Windows CMD 창에서 아래와 같이 js2py 모듈을 설치 합니다.

pip install js2py

다음으로 아래 예제를 실행해 보면~ 굉장히 쉽게 알수 있을 겁니다.


코드 문자들을 js2py.eval_js() 함수를 사용하여 Python 내부에서 바로 사용 할 수 있습니다.


또는 Javascript 코드가 파일로 되어 있는 경우에는 다음과 같이 js2py.translate_file() 함수를  사용하면 Javascript 코드를 Python 코드로 변환해더 import 할 수도 있더군요. 

js2py.translate_file('example.js', 'example.py')


js2py 모듈의 더 많은 예는 아래 주소를 참조하시기 바랍니다. 


https://github.com/PiotrDabkowski/Js2Py




요즘은 굉장히 다양한 오픈소스 프로그램들이 있습니다. 


수치 분석에 주로 MATLAB 을 사용하곤 했지만 요즘은 MATLAB 을 꼭 써야 하는 것들이 아니라면 Python 을 주로 사용하고 있습니다.


회사에서는 차량용 MBD(Model Based Development) 개발을 위해 Simulink 환경에서 Stateflow 툴박스를 주로 활용하는데


모델링의 일부는 Stateflow API 를 사용하여 MATLAB 스크립트를 통해 자동으로 모델을 구성하는 작업을 하곤 합니다.


모델링 구성후에는 당연히 simulation 을 수행하고 simulation 을 마치면 Embedded Coder 를 사용하여 MATLAB 알고리즘/Simulink 모델에 대해 C 코드 생성후 타겟 보드에서 테스트를 진행 합니다.


위와 같은 작업들은 MATLAB/simulink 를 꼭 써야 하는 작업이므로 사용을 하지만, 제어기 로직 설계 하는 것 이외의 다른 분야들에서는 주로 Python 을 사용하고 있습니다.


Python과 같은 프로그램들은 오픈소스 프로그램이라 누구나 사용할 수 있으니 협업시에도 편한것 같네요.


Python 에서도 MATLAB 과 같이 예쁜 그래프들을 표현 할 수 있는데 matplotlib 모듈을 사용하시면 됩니다.


matplotlib 모듈의 홈페이지는 아래와 같습니다. 


https://matplotlib.org/gallery/index.html


위 주소에 들어가 보시면 다양한 그래프 예제들이 있습니다.


하니씩 실행해 보시는것도 재미 있을 겁니다. MATLAB 에 익숙하신 분들은 코드를 이해하는것도 조금더 편할 것 같네요.


matplotlib 는 Anaconda 를 설치하면 기본적으로 설치가 됩니다. 예전에 아래 포스팅에서는 각 모듈들을 하나하나 찾아가며 설치 했었는데


http://iamaman.tistory.com/377


그냥 간편하게 Anaconda 를 설치해서 사용하시는게 정신건강에 이롭더군요.


저도 그래프 하나 그려 봤는데~~ 다음과 같이 코딩을 하면 그래프를 쉽게 그릴수 있습니다.


MATLAB 에서 그래프 그리는것과 유사하죠~ savefig() 함수를 사용하면 아래와 같이 그림으로 저장도 할 수 있습니다. 

matplotlib 의 메뉴얼은 아래 주소에서 확인 할 수 있습니다. 


https://matplotlib.org/tutorials/index.html


아래 포스팅에서도 밝힌 바와 같이 티스토리 Open API 의 파일 첨부 API 는 이미지만 업로드 가능 합니다. 


http://iamaman.tistory.com/2077


저는 스크립트 언어로 주로 Python 을 활용하는데 Python으로 티스토리 Open API 의 파일 첨부 API 를 사용하여 이미지를 업로드 하는 방법에 대해 소개하려 합니다. 


위 링크의 글에서도 언급한 바와 같이 로또 포스팅의 텍스트는 Tistory Open API 를 활용하여 자동으로 업로드 하고 있고 Python 을 사용하고 있습니다. 


매번 반복되는 것들은 항상 자동화 하는게 좋죠.


파일 첨부 API 사용 코드는 아래와 같습니다. 아래 코드의 blogName, token, filepath 변수에 자신의 블로그에 맞게 원하는 파일을 설정하면 끝입니다.



위 코드를 실행해 보니 아래 가이드에서 확인한대로  status, url, replacer 값이 응답으로 오더군요. 

http://www.tistory.com/guide/api/post


status 는 응답코드로 200이 오면 정상으로 파일이 업로드 됐다는 뜻입니다. 정상이 아닐경우 400 이 뜹니다. url 은 말그래도 웹에서 접근할때의 그림 주소입니다. replacer 는 우리가 티스토리 글쓰기를 할때 해당 텍스트를 넣어주면 그림이 들어가는 겁니다. 

아래 그림과 같이 replacer 텍스트를 티스토리 에디터에서 붙여넣기하고

미리보기를 해보니 이렇게 그냥 그림이 나오더군요. 말그대로 텍스트로 해당 값을 넣어주면 그림으로 바뀌는 기능이더군요. 포스팅 작성시에 편리할것 같네요.


Windows 환경에서 TensorFlow 설치를 위해 아래 공식 홈페이지와 
 

아래의 한글 페이지를 참조했다. 


Tensorflow 초기 버전에서는 Windows 에서 설치시 도커 이미지를 사용해서 설치하라고 했던것 같은데 요즘은 그냥 되나 보다.

위 페이지를 참조하여 아래와 같이 간단히 설치 할 수 있다. 


1. Anaconda  3 점대 최신 버전을 설치 한 후에(https://www.anaconda.com/download/)

2. Anaconda Prompt 를 실행시키고 아래 명령어를 통해 py35 라는 이름으로 Python 3.5 버전 환경을 설치한다. 해당 버전은 C:\Anaconda3\envs\py35 폴더에 설치 된다. Eclipse 등을 통해 코딩 할대는 해당 폴더에 있는 python.exe 파일을 interpreter 로 설정하면 된다. 

               conda create --no-shortcuts -n py35 python=3.5 anaconda

3. 아래 명령을 통해 py35 를 활성화 시킨 후에 

               activate py35

4. 아래 명령어를 통해 Tensorflow 를 설치한다. 

               pip install --ignore-installed --upgrade tensorflow
GPU 버전을 설치하고 싶다면 아래 명령어를 통해 설치한다. 
               pip install --ignore-installed --upgrade tensorflow-gpu
설치 메뉴얼을 확인해 보면 GPU 가 있더라도 일단 CPU 버전을 먼저 설치해 보라 추천한다.

5. ipython 실행한 후에 아래 명령어가 정상적으로 실행되면 Tensorflow 가 제대로 설치 된 것이다.

               import tensorflow as tf

ipython 에서 tf. 타이핑 후에 탭을 누르면 아래 그림과 같이 멤버 함수들의 리스트를 보여 줍니다.


위 페이지들 덕분에 생각보다 편하게 설치했네요.



Python 을 사용하면서 이래 저래 많은 툴들을 많들어서 사용하는 중입니다. 

프로그램을 만들시 파라미터들은 보통 argument 에서 받고 했었는데 

파라미터가 매우 많다면 이런 값들은 파일을 통해 받게 만들곤 합니다. 

이런 파라미터 들은 보통 key : value 의 쌍으로 저장하곤 하는데 

이럴때 XML 을 많이 사용해 왔었습니다. 

그런데 XML 은 테그로 구성되다 보니 같은 내용이더라도 복잡해 보이더군요. 즉 가독성이 떨어진다는 생각이 들었습니다. 

그래서 요즘은 json 을 사용하고 있습니다. 

json 파일은 Python 에서 너무 쉽게 다음과 같이 파일을 load 할 수 있습니다. 

import json

with open(jsonFile) as data_file:
     Topology = json.load(data_file)


json 파일을 formatting 하고 싶은 경우에는 아래 주소의 사이트를 추천 합니다.


위 사이트에서는 json 파일을 XML, CSV, YAML 과 같은 형태로 변환 할 수 있으며 사람이 보기 좋게 Formatting 도 해주고 전달하기 좋게 Minify 도 해 줍니다.

이렇게 변환 된 Code 는 파일로 다운로드해서 사용 할 수 있습니다.


Synology nas를 구매하고 이것저것 만지작 거려 보고 있습니다. 

이제 좀 익숙해져서 SSH 를 통해 접속해서 명령어들을 좀 만지작 거리고 있는데 

Python pip 가 없더군요.

일단 python -V 명령을 통해 파이썬 버전을 확인해보면 

2.7 버전이 기본으로 깔려 있더군요.

  • pip 설치는 매우 간단한데 다음과 같습니다.
  • ssh 를 통해 nas 에 터미널로 접속
  • root 로 로긴 (명령어 : sudo su -  )
  • wget https://bootstrap.pypa.io/get-pip.py
  • python get-pip.py

마지막으로 pip 라고 타이핑해서 다음과 같이 나오면 pip 가 정상적으로 깔린 겁니다.




  1. 조현진 2018.12.30 17:50

    질문좀 드립니다.
    써주신대로 pip 설치시 에러가 납니다.
    "Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/pip-18.1.dist-info'
    Consider using the `--user` option or check the permissions."
    이경우 어찌해야 하나요?

    • 남성 2018.12.30 18:27 신고

      에러를 보면 관리자 권한때문에 그런것 같은데 관리자 root 권한으로 변경후 설치해 보시는게 좋을것 같네요. root 권한으로 변경하는 방법은 sudo -i 라고 하면 될 겁니다.


어떤 컴퓨터 언어든 개발을 하기 위해서는 개발 환경을 갖추어야 되겠죠. 

저는 Python 코딩시 Anaconda 를 설치하고 아래 소개했던 Eclipse + Pydev IDE(Integrated Development Environment) 를 사용 합니다.


요즘은 Eclipse 환경 말고도 PyCharm 도 많이들 사용하는것 같더군요. 

그런데 이런 환경을 구성하는게 여의치 않은 경우에는 Cloud IDE 를 사용 하실 수도 있습니다. 

인터넷이 가능한 브라우저만 있다면 이러한 IDE 를 사용하여 Python 개발을 할 수 있습니다.

물론 Python 코드를 테스트 할때도 유용하게 사용 할 수 있습니다.

파이썬을 웹에서 실행하는 사이트는 아래 두 사이트가 검색 되더군요. 

  • 첫번째로 소개해 드릴 사이트는 pythonfiddle 인데 주소는 아래와 같습니다.


아래 그림과 같이 왼쪽에 Examples 가 있어서 예제를 확인해 가면서 코딩 할 수 있는게 장점인것 같습니다. 

Share 버튼을 통해 SNS, Email 등에 공유도 가능 합니다.



  • 다음으로 execute_python_online 이라는 사이트 입니다. 주소는 아래와 같구요. 


Project 버튼을 통해 여러 프로젝트를 관리도 가능 하고~ 오른쪽에 tutorial 링크가 있어서 문법을 참조하면서 코딩 할 수가 있습니다. 

물론 웹에서 코딩을 한 다음에 파일로 PC 에 다운로드도 가능하고 SNS 등을 통한 공유도 가능 합니다.


요즘 Python 을 사용하여 수치 연산을 많이들 하실 텐데 이런 경우 numpy 모듈을 주로 사용합니다.

execute_python_online 에서는 numpy 모듈도 설치가 되어 있더군요.

다음과 같은 numpy 코드를 실행 해 보면 정상적인 결과가 나옵니다. 위에 소개한 pythonfiddle 사이트에서는 numpy 모듈 사용시 에러가 나더군요.

import numpy as np

x = np.array([1.0,2.0,3.0])
print(x)

----------------------- Result ----------------------- 
sh-4.3$ python main.py
[ 1. 2. 3.]



Regular Expression 을 사용하는 경우 항상 테스트가 필요 합니다.

정규 표현식을 잘못 사용하면 돌이킬 수 없는 문제들이 발생 할 수도 있기 때문이죠.

그래서 오늘은 정규 표현식 테스트 사이트들에 대해 간단히소개 하려 합니다.

제가 구글링 해 본 바로는 Python 정규표현식 테스트 사이트로 아래 3개의 사이트가 나오더군요.




나머지 두 사이트는 파이썬 정규 표현식을 테스트만 할 수 있었습니다.

Cheat Sheet 가 있어서 정규표현식 문법이 생각 안날 때 참조하며 할 수 있다는 측면에서는 좋아 보였습니다. 

그런데 첫번째 링크인  https://regex101.com/ 의 경우 테스트 뿐만 아니라 코드 생성도 해 주더군요. 

모든 워드에 _postfix 라는 글자를 넣고 싶다고 해보죠~ 

다음과 같이 정규 표현식을 입력해서 테스트 해보면 모든 워드에 _postfix 를 넣을 수 있습니다.



다음으로 밑에 있는 code generator 버튼을 눌러 보면~ 방금 작성한 정규 표현식에 대해 Python 코드가 나옵니다. 


위 사이트에서 보시면 javascript, php, python, csharp, java, ruby, rust, golang, perl 에 대해 코드 생성을 해주네요~

정규 표현식 사용시 필수 사이트가 될 것 같습니다.



Python 에서 변수 내의 텍스트를 정규표현식에 사용하고자 하는 경우 re.escape 함수를 사용한다.

아래에는 tempText 라는 문자열 중에서  'Save','expressions', 'the' 라는 변수에 저장된 string 을 변경하는 예이다.





import re

tempText = '''
Save Favorites & Share expressions with friends or the Community.
'''
tempText2 = tempText

variables =['Save', 'expressions', 'the']

for var in variables:
  regStr = re.escape(var)
  tempText = re.sub(regStr, '', tempText, flags=re.I | re.MULTILINE)

print "-"*30 + "Before Change" + "-"*30
print tempText2

print "-"*30 + "After Change" + "-"*30
print tempText

위 예제 코드를 돌려 보면 다음과 같은 결과를 얻을 수 있다. variables 라는 변수내의 string 들이 정규표현식에 의해 정상적으로 치환 되는 것을 확인 할 수 있다. 

------------------------------Before Change------------------------------

Save Favorites & Share expressions with friends or the Community.

------------------------------After Change------------------------------

 Favorites & Share  with friends or  Community.




Python 사용시 다차원 배열 또는 튜플을 많이 사용 하곤 합니다.

이렇게 다차원으로 구성된 배열의 일부 Column 만을 뽑아 내고 싶은 경우가 종종 있습니다. 

이런 경우에는 zip() 함수를 사용하면 편리 합니다 .

아래 코드는 그 예제이며 tuple 이나 list 에서 똑같이 동작 합니다. 

print "-"*30 + "Tuple" + "-"*30

Multidimensional_tuple=((1,2,3),(4,5,6),(7,8,9))
print Multidimensional_tuple

Col1, Col2, Col3 = zip(*Multidimensional_tuple)

print Col1
print Col2
print Col3

# -------------------------

print "-"*30 + "Array" + "-"*30
Multidimensional_array=[[1,2,3],[4,5,6],[7,8,9]]
print Multidimensional_array

Col1, Col2, Col3 = zip(*Multidimensional_array)

print Col1
print Col2
print Col3

 위 코드에 따른 결과는 아래와 같습니다. 


각각의 모든 column 이 아니라 특정 column 만 추출하고 싶다면 다음과 같이 안 쓰는 부분들을 _(underscore) 로 처리 하면 됩니다. 

아래 예는 2 번째 column 만 추출 하는 경우의 코드 입니다.

_, Col2, _ = zip(*Multidimensional_array)


간만에 Python을 사용하여 C 확장 모듈을 만들어서 사용하기 위해 책을 펼쳐 들었습니다.

 

저는 열혈강의 파이썬이라는 책을 참조했고

 

아래 주소에서 열혈강의 파이썬 소스코드를 다운로드 받을 수 있습니다. 25장에 있는 C 확장 모듈 예제를 사용했습니다.

 

https://freelec.co.kr/bbs/read.asp?BBSName=LECPDS&SORTUID=53&page=1&id=18333

 

책에 있는 소스코드가 간단하길래 윈도우에서도 그냥 쉽게 될 줄 알았는데… 컴파일러가 뭔가 안 맞는 것 같더군요.

 

다음과 같이 작성한 setup.py 파일을 빌드 하는데… 어쩌구 저쩌구 에러가 쭉~

 

python setup.py build

 

구글링을 해도 그닥 잘 모르겠어서…

 

Virtualbox 에 Mint Linux 64 bits 를 설치하고 터미널에서 다음과 같이 해보니 간단하게 되더군요.

 

sudo apt-get install python-dev -y   # Python.h 를 설치하기 위함

python setup.py build

sudo chmod -R ugo+rX /usr/local/lib/python2.7/dist-packages/   # 파이썬 라이브러리 권한 설정

 

다음으로 아래와 같이 명령을 하니 firefox 가 정상적으로 뜨더군요.

 

역시 개발은 linux 인가 봅니다.


요즘 데이터 처리 관련 내용을 좀 보다가 R 의 함수들을 python 에서 사용 할 수 있다는 것을 알게 되었습니다.

 

바로 rpy2 라는 모듈을 설치하면 되는데~

 

일단 아래 포스팅에서 소개한 바와 같이 R 을 설치 합니다.


http://iamaman.tistory.com/1517

 

R 을 설치한 후에는 위 포스팅에서 소개한 대로 R_HOME, R_USER 환경 변수를 설정합니다.

 

다음으로 Windows Rpy2를 설치 합니다. 아래 링크를 통해 자신의 파이썬, 윈도우 버전에 맞는 rpy2 whl 파일을 다운로드 받고~

 

http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2

 

Python package 설치 하듯이 아래와 같은 형식으로 설치 할 수 있습니다.

 

pip install rpy2-2.7.6-cp27-none-win32.whl

 


이제 rpy2 모듈을 사용하는 일만 남았네요~


엑셀을 사용하면 아래 포스팅에서 소개한 바와 같이

 

http://mwultong.blogspot.com/2006/10/numberstring.html

 

숫자를 글자로 읽게 만들 수 있습니다.

 

NUMBERSTRING() 이라는 함수를 사용해서 아래와 같이 처리가 가능 한거죠~

 

 

그런데 이런 비슷한 경우가 파이썬을 사용해도 가능 하더군요.

 

http://stackoverflow.com/questions/8982163/how-do-i-tell-python-to-convert-integers-into-words

 

 

위 주소를 보니 숫자를 글자로 읽게 만드는 모듈들로 inflect, pynum2word 모듈이 소개 되더군요.

 

현재 윈도우 7 64 비트를 사용 중인데 pynum2word 모듈은 pip 로 설치가 안되는 듯 해서 일단 inflect 을 사용해 봤습니다.

 

위 주소에 나와 있는 것과 같이 다음과 같이 pip 로 설치 가능 합니다.

 

pip install inflect

 

다음으로는 다음과 같이 샘플을 돌려 봤습니다.

 

 

마지막 숫자는 125948963 인데 다음과 같이 표현됩니다…. 읽기도 힘드네요~

 

one hundred and twenty-five million, nine hundred and forty-eight thousand, nine hundred and sixty-three


리눅스 사용자들은 홈 폴더에 대한 개념이 명확 하지만 윈도우 사용자들은 홈 폴더에 대한 개념이 명확하지 않은 경우가 많이 있습니다.

 

요즘 나오는 컴퓨터 운영체제들은 멀티유저용인 만큼 사용자에 따른 홈 폴더 사용은 필수 입니다.

 

Python 사용시 현재 사용자의 home 폴더에 접근 하는 방법에 대해 소개하려 합니다.

 

현재 제 컴퓨터는 Windows 7 64비트 입니다. 그리고 계정은 Administrator 입니다.

 

현재 사용자의 홈 폴더를 확인 하는 방법은 CMD 창에서 다음과 같이 echo %userprofile% 이라고 타이핑 하면 나옵니다.

 


 

컴퓨터가 달라지면 달라지면 당연히 홈 폴더 역시 바뀌게 될 겁니다.

 

따라서 홈 폴더에 대한 접근은 하드 코딩이 아닌 다음과 같은 코딩을 통해 접근 하는 게 좋다고 생각됩니다.

 

from os.path import expanduser

if __name__ == '__main__':

    home = expanduser("~")

    print home

 

위 코드를 실행해보면~ 다음과 같이 자신의 홈 폴더에 접근 할 수 있습니다.

 


아시는 바와 같이 Microsoft Office 제품군에서는 VBA를 활용하여 자동화가 가능 합니다.

 

http://iamaman.tistory.com/592


http://iamaman.tistory.com/1643


 

그런데 Visual Basic뿐만 아니라 다른 언어를 활용해서도 Office 자동화가 가능 합니다. 오늘은 Python 을 이용한 visio 그리기를 해보려 합니다.

 

구글을 좀 뒤져 보니 다음과 같이 좋은 예가 있더군요.



 

저는 현재 Windows 7 64비트를 사용 중인데~ Python 은 32비트를 사용 중입니다. 몇가지 package 들을 사용하기 위해 아래에서도 소개했던 Anaconda 를 사용하는데요~ Anaconda 를 설치하니 win32com 모듈을 그냥 사용 할 수 있더군요.

http://iamaman.tistory.com/1610


http://iamaman.tistory.com/1001


http://iamaman.tistory.com/1648


 

위 코드의 결과 아래와 같은 Visio 다이어그램이 나오게 됩니다.

 

 

좀만 공부해서 응용해 보면 다양한 다이어 그림들을 자동화 할 수 있을 것 같네요.



오늘은 파이썬을 활용하여 각도를 clock 값으로 변환하는 예제에 대해 알아보려 합니다.

 

MATLAB Stateflow 에서 junction 을 연결 할 때 junction 의 연결 지점을 clock 값으로 설정 합니다.

 

이러한 경우 각도에 대한 clock 값을 알 필요가 있습니다.

 

아래는 각도를 clock 값으로 변환해 주는 코드입니다.

 

Anaconda 를 설치해서 사용 중이라 numpy 나 matplotlib 은 설치가 되어 있는 상태입니다.

 

import matplotlib.pyplot as plt

import numpy as np

 

def degreeToClock(degV):

    return str((-(degV / 360.0 * 12.0) + 3) % 12)

 

 

if __name__ == '__main__':

    x = np.linspace(-180, 180, 360)

    y = map(degreeToClock, x)

    line, = plt.plot(x, y, '--', linewidth=2)

      

    plt.grid(True)

    plt.xlabel('Degree')

    plt.ylabel('Clock')

    plt.title('Degree to Clock')

      

    plt.savefig('C:\Degree_to_Clock.png')

    plt.show()

 

다운로드 링크 : Gist


 

위 코드를 실행해 보면 -180~ 180 도 에 대해 아래 그래프와 같이 변환 됩니다.

 


파이썬을 활용하여 메일을 보내는 몇 가지 방법 중에 오늘은 로컬 컴퓨터의 아웃룩을 사용하여 보내는 방법에 대해 소개하려 합니다.

 

아웃룩을 사용하기 위해 win32com.client 을 사용합니다.

 

코드는 다음과 같습니다. 한글을 사용하기 위해 맨 위에 아래와 같이 cp949 를 적어 줬습니다.

 

아래 코드를 사용하면 현재의 아웃룩 계정에서 제목 메일의 내용대로 메일이 날라갑니다.

 

수신자(Ex> abc@naver.com)는 아래 코드의 mail_Address 부분에 넣어 주면 됩니다.

 

# -*- coding: cp949 -*-

 

import win32com.client

 

olMailItem = 0x0

obj = win32com.client.Dispatch("Outlook.Application")

newMail = obj.CreateItem(olMailItem)

newMail.Subject = "제목"

newMail.Body = "메일 내용"

newMail.To = "mail_Address"

newMail.Send()

 



개인적으로 자동화에 관심이 많이 있습니다.

 

회사에서 주로 윈도우를 사용하는 관계로 Autohotkey 를 많이 사용하는 편인데~

 

때에 따라서는 python 을 사용할 때도 많이 있습니다.

 

그래서 python 에서 autohotkey 를 사용할 수 있는 방법은 없을까 해서 찾아보니

 

아래와 같이 pyahk 라는 파이썬 모듈이 있더군요.

 

https://pyahk.readthedocs.org/en/latest/

 

아시는 분도 계시겠지만 Autohotkey 는 Autohotkey_L, Autohotkey_H 와 같은 다양한 버전이 있습니다.

 

이중 Autohotkey_H 에는 Autohotkey.dll 이 있어서 다양한 프로그램들에서 Autohotkey 를 사용할 수 있도록 해 줍니다.

 

위에서 소개한 pyahk 역시도 이 Autohotkey.dll을 사용한 모듈 입니다.

 

일단 파이썬에서 pyahk를 설치하기 위해 다음과 같이 pip 를 사용하여 pyahk 모듈을 설치 합니다.

 

pip install pyahk

 

저는 현재 python 2.7 windows 32 비트 버전을 설치하여 사용 중입니다. 현재 pyahk 는 Autohotkey_H ANSI 32-bit Version 1.1.8.1 에 대한 wrapper 이라 합니다. 또한 python 3 에서는 동작하지 않는다고 하네요.

 

다음으로 아래 주소에서 Autohotkey_H 를 다운로드 합니다.

 

http://www.autohotkey.net/~HotKeyIt/AutoHotkey/files/AutoHotkey-txt.html

 

현재 1.1 버전의 직접적인 다운로드 주소는 다음과 같습니다. 크롬에서는 아래 주소의 파일을 다운로드 하려 하니 유해 프로그램 경고가 뜨네요.

 

http://hotkeyit.ahk4.net/AutoHotkey.zip

 

일단 다운로드 후에 압축을 해제 하고 Win32a 폴더에 있는 Autohotkey.dll 파일이 들어 있는 폴더를 환경 변수에 설정하거나 파이썬 프로젝트 내에 Autohotkey.dll 파일을 넣어 줍니다.

 

이제 파이썬에서 테스트를 해보죠.

 

다음은 pyahk 의 홈페이지에 있는 예제 코드인데 Notepad 라는 타이틀의 창이 있는지를 체크하고 있을 때는 HWND 값을 출력합니다.

 

# -*- coding: cp949 -*-

 

import ahk


script = ahk.Script() # Initializes with start and ready commands as above

a = script.winActive("Notepad") # Sets a to the return value of the method

print a # prints the HWND of the found window as an int, or None

script.variable('b', float) # Creates a transparent variable attribute

ahk.execute("Random, b, 0.0, 1.0") # Stores value in `b`

print 100 * script.b # b is retrieved and converted to its saved type (float)

 

다음으로 b 라는 변수를 설정한 다음 Autohotkey random 함수를 사용하여 0~1 사이의 값을 구하고 곱하기 100을 해서 출력하는 예입니다.

 

파이썬 파일의 맨 위에는 cp949로 인코딩 옵션을 넣어 줬습니다.

 

일단 실행을 해보니~ 다음과 같이 정상적으로 동작하더군요.

 

 

그런데 다음과 같이 위에 부분을 주석 처리 하고 실행해 봤습니다.

 

결과를 보시면 아시겠지만 뭔가 이상한 결과가 나오더군요. 변수 메모리 참조를 잘못하는 게 아닌가 하는 생각이……

 

아직은 0.2 대의 버전이니만큼 버그가 있는 걸로 보이네요.

 

좀더 확인을 해 봐야겠지만…… ahk.execute() 함수를 사용한 autohotkey 실행은 괜찮게 돌아가는 것 같네요.

  1. 광영 2018.03.05 22:52 신고

    잘 봤습니다. 아무래도 화면제어 쪽이 필요한 일이 있어서 알아보다가, 파이썬으로 제어를 찾다 보니 여기까지 검색으로 흘러 들어왔습니다. 게시물들 잘 보겠습니다.

  2. 2018.03.12 08:49

    비밀댓글입니다

  3. 안준 2018.03.12 09:16

    안녕하세요 파이썬 게시판 항상 열심히 보고있었습니다~
    저도 자동화에 많은 관심이있는데요,
    파이썬, 오토핫키 두개를 따로 쓰다가 문득 같이 쓰면 좋을거 같다는 생각을했습니다.
    근데 파이썬에서 오토핫키의 장점 키보드 마우스 제어는 해보셨나요?ㅠㅠ
    안되는거같아서요...

    • 남성 2018.03.12 11:48 신고

      파이썬을 사용하여 윈도우를 자동화 하기 위한 라이브러리로 pywinauto 라는 라이브러리가 있습니다. 윈도우 운영체제에서 키보드 마우스를 자동화 하기 위한 것이라면 굳이 파이썬에서 오토핫키를 연동 하려는 노력보다는 pywinauto 와 같이 파이썬 만으로 구성된 라이브러리를 사용하여 보시는게 조금 더 편하실 것 같습니다

텍스트 파일을 사용하다 보면 encoding 이 문제가 되는 경우가 종종 있습니다.

 

이런 경우에는 encoding 을 변경하여 해결 하곤 하는데~

 

notepad++ 와 같은 에디터의 기능을 활용 하거나~ 아니면 iconv 와 같은 명령어를 사용하여 encoding 을 변경하곤 하는데요~

 

iconv 와 같은 명령어를 활용하더라도 현재 텍스트 파일의 encoding 방식을 확인 해야 합니다.

 

encoding을 확인 하기 위해 일일이 에디터에서 파일을 여는 것도 귀찮아서 찾아보니~

 

chardet 라는 python 모듈을 있더군요.

 

https://github.com/chardet/chardet

 

위 주소에서 확인 할 수 있는 바와 같이 아래 타입들을 detect 할 수 있다고 합니다.

 

ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants), Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese), EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese), EUC-KR, ISO-2022-KR (Korean), KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic), ISO-8859-5, windows-1251 (Bulgarian), windows-1252 (English), ISO-8859-7, windows-1253 (Greek), ISO-8859-8, windows-1255 (Visual and Logical Hebrew), TIS-620 (Thai)

 

python 모듈이니만큼 설치도 굉장히 간단한데요~

 

다음과 같이 pip 로 설치 할 수 있습니다.

 

pip install chardet

 

설치는 하면 아래 그림과 같이 C:\Python27\Scripts\chardetect.EXE 에 chardetect 실행 파일이 설치가 됩니다.

 

그럼 다음과 같이 명령어를 이용하여 텍스트 파일의 encoding 을 확인 할 수 있습니다.

 

chardetect 파일명1 파일명2 파일명3 …

 


Python 으로 만든 모듈을 실행 파일로 만들기 위해서 기존에는 py2exe, py2app 와 같은 툴을 사용했었는데요.

 

최근에 cx_Freeze 라는 툴도 있다는 걸 알게됐습니다.

 

cx_Freeze 는 cross platform 툴인데요~

 

요즘 주로 사용하는 윈도우 7 64 비트에서도 정상적으로 동작하더군요.

 

일단 설치는 pip 가 설치되어 있다면 다음과 같이 하면 설치되더군요.

 

pip install cx_Freeze

 

pip 가 설치되어 있지 않은 분들은 아래 글 참조하여 설치하시기 바랍니다.


http://iamaman.tistory.com/984

http://iamaman.tistory.com/m/post/997


 

아래는 다른 블로그에서 봤던 sqrt.py 파일인데요~ 간단하게 sqrt() 값을 계산해 주는 겁니다.

 

import math

sqrt=math.sqrt

x=int(input('enter the number here:'))

 

y=sqrt(x)

print(y)

input('press exit')

 

실행할 파이썬 모듈 파일을 만든 다음에 setup.py 파일을 작성해 줍니다.

위 코드에서 create_shared_zip 을 False 로 함으로서 library.zip 파일을 생성하지 않게 할 수 있습니다.

 

다음으로 command 창에서 간단하게 아래 그림과 같이 setup.py build 라는 명령어를 치면~ build 폴더 안에 ~ sqrt.exe 라는 이름의 실행 파일이 만들어집니다.

 

Sqrt.exe을 실행 시키면 아래 그림과 같이 실행이 되죠~ 같이 생성되는 sqrt.exe 실행 파일이 실행되기 위해서는 python27.dll 파일이 환경변수 안에 있으면 됩니다.


오늘은 Python Graphviz 모듈 사용법에 대해 간단히 알아보겠습니다.

 

Doxygen 을 사용해 본 분들은 아시겠지만 GraphViz 는 스크립트로 다이어그램 등을 그릴 수 있는 툴 입니다.

 

규격화된 다양한 그래프들을 스크립트로 그릴 수 있으니 노가다를 안 해도 돼서 굉장히 편리하더군요.

 

아무튼 이 GraphViz 를 python 을 통해서 사용하는 방법이 있더군요.

 

바로 GraphViz 모듈을 사용하는 건데요~ 아래 주소에 그 예나 설치 방법 등이 나와 있더군요.

 

https://pypi.python.org/pypi/graphviz

 

pip 를 설치하신 분들은 그냥 간단하게 커맨드 창 또는 쉘에서 pip install GraphViz 라고 타이핑 하면 설치가 됩니다. Pip 설치 안되신 분들은 아래 주소 참조해서 설치하면 됩니다. 요즘은 윈도우에서 파이썬을 설치하면 pip 도 자동으로 설치가 되더군요. 

 

http://iamaman.tistory.com/997

http://iamaman.tistory.com/984

 

그리고 만들어진 dot source code 를 실행 하기 위해서는 당연히 GraphViz 가 설치되어 있어야 합니다. GraphViz 는 아래 주소에서 설치 가능 합니다.

 

http://www.graphviz.org/Download.php

 

GraphViz 는 윈도우 64 비트의 경우 보통 아래 폴더에 설치가 되고~ 아래 폴더를 환경변수의 Path 에 추가하여 시스템 어디에서나 dot.exe를 실행 할 수 있도록 합니다. 포터블 버전을 다운로드 받아서 사용 중이시라면 해당 bin 폴더를 path 에 추가하면 됩니다.

 

C:\Program Files (x86)\Graphviz2.38\bin

 

위 GraphViz 모듈 주소의 예제를 약간 수정하여 스크립트를 하나 만들어 봤습니다.

 

위 코드를 실행하면~ 아래 그림과 같이 커맨드 창에 해당GraphViz 스크립트가 나오고~

 

 

아래 그림과 같이 다이어그램이 보여 집니다. 해당 그래프 및 GraphViz 스크립트는 해당 작업 폴더의 test-output 폴더 안에 저장이 됩니다.

 

 

다음으로 위 그림에서 언더라인이 있는 Sir Bedevere the Wise 을 클릭하면 제 블로그인 http://iamaman.tistory.com/ 가 뜨는 것을 확인 할 수 있습니다.

 

그 외 참조 주소:

GraphViz Node Shapes: http://www.graphviz.org/doc/info/shapes.html

Target 값들에 대한 설명: http://stackoverflow.com/questions/7008355/how-to-make-links-in-an-embedded-svg-file-open-in-the-main-window-not-in-a-sepa


+ Recent posts