반응형

문자열 구성하는 character & ascii code 순서대로 출력하기



테스트환경 : windows 7 32bit, visual studio 2013 express





<결과>








반응형
Posted by 자유프로그램
,
반응형

python 으로 github api v3 접근하기 -- httplib


테스트 환경 : windows 7 32 bit, python 2.7.7


github api 참고 : https://developer.github.com/guides/getting-started/

httplib  : https://docs.python.org/2/library/httplib.html#




** PyGithub 등과 같은 python wrapper library 를 이용하여 github api 접근하는게 편하지만,

    github 는 기본적으로 API HTTP 를 이용한 접근법을 제공하므로 wrapper 모듈 사용하기전에 

    HTTP 접근법을 python으로 이용해 보자.

    ( 위 github api 개발자 사이트는 cURL 을 이용한다.)



1. Hello World



   ---> 위의 curl 명령어를 python으로 구현해보자.


1) 1차 접근법  ==> 실패


하지만,  httplib 사이트에 나온 예제 처럼 접근하면 error!

* 에러 표시에서 보이듯이, github api 접근시에는 User-Agent header 가 필요하다.





2) 2차 수정 접근법  ==> 성공 !!!

  -- User-Agent header 를 만들어 github api 에 접속하자!


 
import httplib

conn = httplib.HTTPSConnection("api.github.com")

conn.putrequest("GET", "/zen")
conn.putheader("User-Agent", "MyTest")  # User-Agent 만들기, 내용은 상관없다.
conn.endheaders()

res = conn.getresponse()

print res.status, res.reason
print res.read()



  * zen 출력 내용물은 계속 바뀐다...




2. 사용자 github profile 가져오기


위에 적은 github 개발자 사이트의 내용중 아래의 것을 python 으로 구현하자.


  --> GET 방식,  접근할 사용자 주소는 /users/defunkt


 
import httplib

conn = httplib.HTTPSConnection("api.github.com")

conn.putrequest("GET", "/users/defunkt") # Get 방식, 접근할 사용자 주소
conn.putheader("User-Agent", "MyTest")  # User-Agent 만들기, 내용은 상관없다.
conn.endheaders()

res = conn.getresponse()

print res.status, res.reason
print res.read()



 --> 출력 결과 : json 포맷으로 나온다.




3. json 결과 뿐만 아니라 , 헤더 정보도 가져오기.


  -->  curl  에서는 -i 옵션을 사용하면, header 정보를 보여준다.


 
import httplib

conn = httplib.HTTPSConnection("api.github.com")

conn.putrequest("GET", "/users/defunkt") # Get 방식, 접근할 사용자 주소
conn.putheader("User-Agent", "MyTest")  # User-Agent 만들기, 내용은 상관없다.
conn.endheaders()

res = conn.getresponse()

headers = res.getheaders()     # header 정보 list 

print res.status, res.reason

print ' ------------  header info -------------- '
for x in headers:
    print x
print ' ---------------------------------------- '

print res.read()


< 결과 >












반응형
Posted by 자유프로그램
,

base64 encoding , decoding

python 2014. 8. 21. 22:21
반응형

base64 encoding, decoding



참고 : https://docs.python.org/2/library/base64.html



 
>>> import base64
>>>
>>> encoded = base64.b64encode('data to be encoded')   # encoding
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>>
>>> data = base64.b64decode(encoded)          # decoding
>>> data
'data to be encoded'
>>>




반응형
Posted by 자유프로그램
,
반응형

PyGithub 으로 github 주무르기 



테스트 환경 : windows 7 32bit, python 2.7.7


PyGithub 사이트 주소 : https://github.com/jacquev6/PyGithub/tree/develop_v2

PyGithub documentation : http://jacquev6.github.io/PyGithub/v2/index.html#



<< 설치 >>


1. 소스 다운로드하기 

    - PyGithub 사이트 주소 들어가서 오른쪽에있는 Download ZIP 버튼을 눌러 zip 파일로 소스 다운 받는다.



2. 다운받은 zip 파일압축 해제후, 명령창에서 해당 경로로 이동한다.




3. PyGithub 모듈 설치하기 전에, 필요한 모듈들 설치하기.

   - 설치에 필요한 모듈들은 'requirements.txt' 파일에 적혀있다.




4. 실제 PyGithub 모듈 설치하기




5. 설치 완료 확인 -- python shell 이나 IDLE 실행하여 아래와 같이 import 성공하는지 확인하면됨.






<< 사용법 >>


1.  github id 로 접속하여, 이름 알아내기


 
>>> import PyGithub
>>> g = PyGithub.BlockingBuilder().Build()
>>> u = g.get_user("jayu108")    # github id
>>> print u.name    # github id 해당 이름.
park
>>> r = u.get_repo("biopython")   # github id 소유의 repository 이름
>>> print r.stargazers_count
0
>>> 


2. 


   ....  작성중 ...




반응형
Posted by 자유프로그램
,
반응형

== , is 차이점


환경 : windows 8.0 64bit, python 2.7.5 64bit


참고 :  http://stackoverflow.com/a/1085656


== is for value equality. (값 비교)

is is for reference equality. (참조 비교)


 
>>> a = 1234
>>> b = 1234   # a, b  값(1234)은 같다 
>>> 
>>> id(a)
46033040L
>>> 
>>> id(b)    # a, b 참조(id)는 다르다.
46033088L
>>> 
>>> a == b   # 값 비교
True
>>> 
>>> a is b   # 참조 비교
False
>>> 
>>> 







*** 예외 상황 ***


1. 정수형 숫자 (integer caching)

     -5256 까지는 내부적으로 cached 되어있는듯.


      참고 : http://choorucode.com/2012/05/01/integer-caching-in-python/


** 아래 코드를 실행해 보자!!!!!

 
for i in range(-100, 300):
    a = i + 1
    b = int(str(i)) + 1
    if a is b :    # id (참조) 같은 경우
        print '%d is %d'%(a,b), '  --> cached'
 


-- 주의 사항 --

 
>>> 257 is 257   # 잘못된 결과 나온다.
True
>>>

>>> a = 257
>>> b = 257
>>> a is b    # 변수로 비교해야 제대로 결과 나옴.
False
>>>



2. 문자열 

   --- 'string interning' 개념인데, 

          ; "문자열이 처음 생길때 파이썬 내부적으로 table 에 보관하고, 

         같은 문자열을 생성할때 이미 똑같은 문자열이 table 에 있으면

         새로 생성하지 않고, 내부 table 의 참조를 반환하여 같이 사용하게 한다" 는 의미!


   참고 : http://guilload.com/python-string-interning/

            https://docs.python.org/2/library/functions.html#intern

            http://mattyjwilliams.blogspot.kr/2011/12/string-equality-identity-and-interning.html

            http://en.wikipedia.org/wiki/String_interning  ---> 위키 : java, .net 등에서 사용하는 개념이다.

            http://stackoverflow.com/questions/15541404/python-string-interning



 
>>> a = 'abc'
>>> b = 'abc'
>>> a == b
True
>>> a is b    # a, b 가 같은 문자열 참조 (string interning)
True
>>> 
>>> 
>>> c = 'abc!'
>>> d = 'abc!'
>>> c == d
True
>>> c is d    #  c, d 참조가 다르다!!!!  ( 예상과 다른 결과 ???????)
False
>>> 
>>> 
>>> 
>>> m = 'a'*10
>>> mm = 'aaaaaaaaaa'
>>> m == mm
True
>>> m is mm      # m, mm 가 같은 문자열 참조 (string interning)     
True
>>> 
>>> 
>>> n = 'a'*30
>>> nn ='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
>>> n == nn
True
>>> n is nn     #  n, nn 참조가 다르다!!!!  ( 예상과 다른 결과 ???????)
False
>>> id(n)
46363824L
>>> id(nn)
46363312L
>>> 
 


 --- python 2.7.5 에서는 경우에 따라 다른듯. ???



반응형
Posted by 자유프로그램
,