elasticsearch에 보면 json 출력을 예쁘게 (&pretty) 할 수 있다.



만약 url을 통해 들어오는 json이라면 python을 활용해 예쁘게 출력할 수 있다. 



echo '{"url":"http:\/\/search.google.com\/api/v2/keyword", "param":"abc"}' | python -mjson.tool

{

    "url": "http://search.google.com/api/v2/keyword",

    "param": "abc"

}




Posted by 김용환 '김용환'



python3로 마이그레이션 하던 중에 다음과 같은 에러를 만났다.


 {%- for hostname, stat in stat.iteritems() %}

jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'iteritems'





python3의 dict 클래스의 iteritems는 items로 변경되었다.







Posted by 김용환 '김용환'



virtualenv에서 그냥 가상 환경을 실행하면 python2 환경으로 구축된다.



$ virtualenv envname




python3 환경으로 구축하고 싶다면 다음 커맨드를 실행한다.



$ virtualenv -p python3 envname



Posted by 김용환 '김용환'


python 컴파일시 아래와 같은 python 에러가 발생할 수 있다. 




gevent/gevent.corecext.c:5:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1




python 개발 라이브러리가 없어서 에러가 발생한 것이다.




python 2.x라면 다음과 같이 실행한다.


$ sudo apt-get install python-dev



python 3.x라면 다음과 같이 실행한다.


$ sudo apt-get install python3-dev



Posted by 김용환 '김용환'

[python3] ++ 연산자

python 2017.09.28 20:03

python3에는 ++ 연산자가 없다.


+= 연산자만 있을 뿐이다.


예제



            if not self.conn.connected:

                retry_count += 1

Posted by 김용환 '김용환'





            

            

python2에서 string 타입에 대해서 decode('utf-8')를 잘 실행할 수 있지만, 

python3에서는 기본이 utf-8이기 때문에 굳이 decode를 사용할 필요가 없다. 따라서 decode 함수도 없다. 



>>> result = ""

>>> str(type(result))

"<class 'str'>"

>>> result.decode('utf-8')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'str' object has no attribute 'decode'

>>>


https://docs.python.org/3/howto/unicode.html


The default encoding for Python source code is UTF-8, so you can simply include a Unicode character in a string literal:





또한 None도 생겼다.


python2에서는 kazoo를 통해서 얻은 값은 empty string이였는데.. python3에서는 None타입을 사용했다.

flask에서는 다음과 같이 사용했다.

{% if node.data == None %}
{% else %}
<span style="word-wrap: break-word">
{{node.data}}
</span>
{% endif %}


Posted by 김용환 '김용환'


파이썬에서 타입, 값을 확인할 수 있는 예제이다. 



type()을 이용해 타입 확인할 수 있다. 


print("aaaaaaa : " + str(type(result)))


str()을 이용해 값을 확인할 수 있다.


print("aaaaaaa : " + str(result))



string 인스턴스라면..


if isinstance(result, str):


string 인스턴스가 아니라면.



if not isinstance(result, str):



None을 확인하는 코드이다.


a = None

if not a:

    print("1")

else:

    print("2")



결과는 다음과 같다.


1



None을 체크하는 코드이다. 


a = "1"

if not a:

    print("1")

else:

    print("2")



결과는 다음과 같다.

2



'python' 카테고리의 다른 글

[python3] ++ 연산자  (0) 2017.09.28
python2와 python3의 차이점 - string.decode()  (0) 2017.09.28
[python3] 파이썬 값/타입 확인 예제  (0) 2017.09.28
flask 환경 구성하기  (0) 2017.09.19
pyenv 설치 방법  (0) 2017.09.19
[python3] sorted 함수 예제  (0) 2017.07.20
Posted by 김용환 '김용환'



flask 설정하기 


$ virtualenv flaskapp

Using base prefix '/Users/samuel.kim/.pyenv/versions/3.6.0'

New python executable in /Users/samuel.kim/dev/my/test-flask/flaskapp/bin/python3

Also creating executable in /Users/samuel.kim/dev/my/test-flask/flaskapp/bin/python

Installing setuptools, pip, wheel...done.




활설화하려면 다음 커맨드를 사용한다.


$ . bin/activate

(flaskapp)



이제 flaskapp virtualenv가 추가되었다. 


shell에 변경되어 있다. 

(flaskapp) [~] 

(flaskapp) [~] 



Flask를 설치한다. 


$ pip install Flask




main.py을 다음처럼 수정한다. 


from flask import Flask


app = Flask(__name__)



@app.route('/')

def hello_world():

    return 'Hello World!'



if __name__ == '__main__':

    app.run()




그리고 쉘에서 다음처럼 실행하고 localhost:5000에 접속한다.


$ export FLASK_APP=main.py

$ flask run

 * Serving Flask app "main"

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

127.0.0.1 - - [19/Sep/2017 20:50:50] "GET / HTTP/1.1" 200 -





Posted by 김용환 '김용환'

pyenv 설치 방법

python 2017.09.19 16:10



pyenv 설치 방법이다. 




$ python --version

Python 2.7.12


$ pyenv install 3.6.0


$ pyenv versions

  system

  2.7.12

* 3.6.0 (set by /Users/samuel.kim/.pyenv/version)






virtualenv를 설치한다.


$ python3 -m pip install virtualenv virtualenvwrapper


$ virtualenv

You must provide a DEST_DIR

Usage: virtualenv [OPTIONS] DEST_DIR



$ pip -V

pip 9.0.1 from /Users/samuel.kim/.pyenv/versions/3.6.0/lib/python3.6/site-packages (python 3.6)

 


$ pip install virtualenv virtualenvwrapper



$ brew install pyenv-virtualenv




~/.bash_profile에 다음을 추가한다. (설정)



export PATH="$HOME/.pyenv/bin:$PATH"

export PYENV_VERSION=3.6.0

eval "$(pyenv init -)"

eval "$(pyenv virtualenv-init -)"




~/.bash_profile을 읽는다. 


$ source ~/.bash_profile



.pyenv 밑에 python이 위치한다면 성공한 것이다.



$ which python

/Users/samuel.kim/.pyenv/shims/python

  

  


이제 정상적으로 동작하는 지 확인한다. pyenv에서 파이썬을 설치하려면 install 커맨드를 실행하며 다음과 같다. 



bash_profile에서 설정된 대로 동작되었다. 


$ python --version

Python 3.6.0(set by PYENV_VERSION environment variable)


$ pyenv install 3.6.1


$ pyenv shell 3.6.1

 

$ pyenv versions

  system

* 3.6.0 

* 3.6.1 (set by PYENV_VERSION environment variable)

  





pyenv의 특정 버전을 삭제하려면 uninstall을 사용하며 다음과 같다.


$ pyenv uninstall 3.6.0

  



pyven 버전 이동은 shell을 사용한다.


$ pyenv shell 2.7.12

$ pyenv version

2.7.12




'python' 카테고리의 다른 글

[python3] 파이썬 값/타입 확인 예제  (0) 2017.09.28
flask 환경 구성하기  (0) 2017.09.19
pyenv 설치 방법  (0) 2017.09.19
[python3] sorted 함수 예제  (0) 2017.07.20
[python3] python3에서 자주 실수하는 부분  (0) 2017.07.18
[python3] dict()의 in의 의미  (0) 2017.07.11
Posted by 김용환 '김용환'



파이썬의 sorted 함수는 콜렉션(List, Tuple, 등) 및 배열을 정렬할 수 있다. 


정렬 키를 lambda를 사용해서 깔끔히 정렬되는 것을 보니 깔끔해 보인다. 



print("List")
lst = ['cc', 'aa', 'ba', 'md']
print(list)
print("origin-", lst)
print("sort-", sorted(lst))
print("sort(reverse)-", sorted(lst, reverse=True))
print("\n")

print("\n")
print("Tuple")
tup = [('cc', 3), ('aa', 2), ('ba', 5), ('md', 4)]
print("origin-", tup)
print("sort-", sorted(tup, key=lambda tup: tup[1]))
print("sort(reverse)-",sorted(tup, key=lambda tup: tup[1], reverse=True))
print("\n")

print("\n")
print("Class")
class Member:
def __init__(self, id):
self.id = id
def __repr__(self):
return repr(self.id)

members = [Member(1), Member(10), Member(5), Member(4)]
print("origin-", members)
print("sort-", sorted(members, key=lambda member: member.id))
print("sort(reverse)-", sorted(members, key=lambda member: member.id, reverse=True))


예제 결과는 다음과 같다. 


List

<class 'list'>

origin- ['cc', 'aa', 'ba', 'md']

sort- ['aa', 'ba', 'cc', 'md']

sort with reverse- ['md', 'cc', 'ba', 'aa']





Tuple

origin- [('cc', 3), ('aa', 2), ('ba', 5), ('md', 4)]

sort- [('aa', 2), ('cc', 3), ('md', 4), ('ba', 5)]

sort with reverse- [('ba', 5), ('md', 4), ('cc', 3), ('aa', 2)]





Class

origin- [1, 10, 5, 4]

sort- [1, 4, 5, 10]

sort(reverse)- [10, 5, 4, 1]

Process finished with exit code 0

Empty test suite.




'python' 카테고리의 다른 글

flask 환경 구성하기  (0) 2017.09.19
pyenv 설치 방법  (0) 2017.09.19
[python3] sorted 함수 예제  (0) 2017.07.20
[python3] python3에서 자주 실수하는 부분  (0) 2017.07.18
[python3] dict()의 in의 의미  (0) 2017.07.11
[python3] 맥에서 spyder 설치/실행  (0) 2017.04.28
Posted by 김용환 '김용환'