파이썬에는 list, tuple, range 세가지 기본 시퀀스 타입(sequence type)이 있다. 시퀀스와 비슷한 binary sequence typetext sequence type이 있지만 이 타입들은 다른 섹션에서 설명하기로 한다.


https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range


WRITTEN BY
히처리
python + er = pyther

,

딕셔너리 뷰 객체(Dictionary view obejct)는 dict.keys(), dict.values(), dict.item()가 리턴하는 객체이다. 딕셔너리 뷰 객체는 딕셔너리와 동적인 관계를 가진다. 그래서 딕셔너리의 아이템이 변하면 딕셔너리 뷰의 내용도 변한다.


len(dictview)

dictview 데이터의 수를 리턴한다.


iter(dictview)

dictview 데이터를 이터레이터(iterator)로 리턴한다. 이터레이팅(iterating)하는 중 딕셔너리의 데이터가 추가되거나 삭제되고 있으면 RuntaimeError가 발생하거나 딕셔너리의 모든 데이터를 이터레이터하는데 실패할 수 있다. ( python3.7에서는 이 문제가 해결되었다.)


x in dictview

dictview에 x가 있으면 True, 없으면 False를 리턴한다. item은 (key, value) 튜플로 x를 전달해야 한다.

'reference > dict' 카테고리의 다른 글

Mapping Types - dict  (0) 2018.08.12

WRITTEN BY
히처리
python + er = pyther

,

자료구조 중에서 키를 통해서 값을 사용하는 매핑타입(또는 해쉬타입이라고도 한다.)이 있다. 현재 파이썬에서는 딕션너리(dictionary)가 유일한 매핑타입이다. 

딕션너리는 {key: value} 형식으로 만들거나, dict생성자로 만들 수 있다. dict생성자는 다양한 방법으로 딕셔너리를 만들 수 있는 것을 볼 수 있다.

>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True


len(d)

딕션너리 d에 있는 아이템 수를 리턴한다. (아이템 수는 키의 수와 동일하다.)


d[key]

d에 key로 저장된 값을 리턴한다. 만일 key가 없으면 KeyError가 발생한다.


d.get(key[, default])
d에서 key의 값을 리턴한다. 두번째 인자인 default를 전달하지 않고 key가 없으면 None을 리턴하고, 두번째 인자인 default를 전달하고 key가 없으면 default를 리턴한다. d[key]와 다르게 key가 없어도 KeyError가 발생하지 않는다.


del d[key]

d에서 key를 삭제한다. ( key의 값도 같이 삭제된다. ) 만일 key가 없으면 KeyError가 발생한다.


key in d

d에 key가 있으면 True, 없으면 False를 리턴한다.


key not in d

d에 key가 없으면 True, 있으면 False를 리턴한다. 


iter(d)

d의 키들을 iterator로 리턴한다. 이것은 iter(d.keys())의 숏컷(shortcut)이다.


d.clear()

d의 모든 아이템들을 삭제한다.


d.copy()

d의 복사본을 리턴한다.


d.fromkeys(seq[, value])

복사본을 만들고 싶은 키값들을 첫번째 인자인 seq로 전달한다. seq는 list, tuple, set타입이다. 두번째 인자인 value에 값을 전달하면 복사본의 값들은 다 value가 된다. 만일 2번째 인자를 전달하지 않으면 None값을 가진다.


d.items()

d에 있는 키와 값들을 (key, value) 쌍들로 딕셔너리 뷰 객체(Dictionary view object)로 리턴한다.


d.keys()

d이 있는 키들을 딕셔너리 뷰 객체로 리턴한다.


d.values()

d에 있는 값들을 딕셔너리 뷰 객체로 리턴한다.


d.pop(key[, default])

d에 key가 있으면 key가 삭제되고 해당 key의 값을 리턴한다. default를 전달하고 key가 있으면 default와 상관없이 해당 key의 값이 리턴된다. 만일 default를 전달하지 않고 key가 없으면 KeyError가 발생하지만, default를 전달하고 key가 없으면 default가 리턴된다.


d.popitem()

LIFO순으로 마지막에 입력한 아이템을 삭제하고 (key, value) 튜플로 리턴한다. 만일 d가 비어있는데 popitem()사용시 KeyError가 발생한다. ( python3.7에서는 정확한 LIFO이 보장되지만, 이전 버전에는 불안정하다. )


d.setdefault(key[, default])

d에 key가 있으면 deafult에 상관없이 key의 해당 값을 리턴한다. 만일 key가 없고 default를 전달하면 key에 default를 값으로 아이템을 추가하고 default를 리턴한다. 만일 key가 없고 default를 전달하지 않으면 key에 None값으로 아이템을 추가하고 None을 리턴한다.


d.update([other])

키와 값 쌍으로 이루어진 other를 전달하여 d에 키와 값들을 추가한다. 만일 키가 존재하면 해당 키의 값을 덮어쓴다. update()메서드는 None을 리턴한다. other은 dict 생성자에서 사용하는 다양한 방법으로 키와 쌍을 전달할 수 있다.

'reference > dict' 카테고리의 다른 글

딕셔너리 뷰 객체(Dictionary view object)  (0) 2018.08.12

WRITTEN BY
히처리
python + er = pyther

,

온라인 저지의 문제 중에서 아래와 같이 많은 줄의 값을 받는 경우가 있다.

 

입력

3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5

 

이때 input()을 이용해서 값을 읽을 수 있다.

for _ in range(int(input())):
    a = list(map(int, input().split()))

 

하지만 이렇게 input()을 이용하면 처리시간이 오래걸린다.

 

그래서 sys.stdin.readline()를 이용해야 한다.

import sys
for _ in range(int(sys.stdin.readline())):
    a = list(map(int, sys.stdin.readline().split()))

 

 


WRITTEN BY
히처리
python + er = pyther

,

XingAPI의 t1444를 이용해서 시가총액순위를 얻을 수 있다.

 

shcode 종목코드
hname 종목명
price 현재가
volume 거래량
vol_rate 거래비중 : 주식 전체의 거래 대비 %
total 시가총액
rate 비중 : 주식 전체의 시가총액 대비 %
for_rate 외인비중 : 해당 종목의 외인 비중 %

 

위의 정보를 csv형식으로 저장하였다.

 

시가총액순위.txt

 

'주식 자료실' 카테고리의 다른 글

xingAPI 업종코드  (0) 2018.07.16
주식 종목명, 단축코드, 확장코드, 구분  (0) 2018.07.16

WRITTEN BY
히처리
python + er = pyther

,

XingAPI의 t8424를 이용해서 업종코드를 얻을 수 있다. 업종명(hname), 업종코드(upcode)를 csv형식으로 저장하였다.

 

업종코드.txt

 

'주식 자료실' 카테고리의 다른 글

시가총액순위 TOP 500위  (0) 2018.07.16
주식 종목명, 단축코드, 확장코드, 구분  (0) 2018.07.16

WRITTEN BY
히처리
python + er = pyther

,

XingAPI의 t8430을 이용해서 주식 종목에 관련 된 정보를 얻을 수 있다. 나는 python을 이용하여 주식 종목명(hname), 단축코드(shcode), 확장코드(expcode), 구분(1:코스피, 2: 코스닥)에 대한 정보를 얻었다. 그리고 이 정보를 cvs형식으로 저장하였다.

 

주식종목.txt

'주식 자료실' 카테고리의 다른 글

시가총액순위 TOP 500위  (0) 2018.07.16
xingAPI 업종코드  (0) 2018.07.16

WRITTEN BY
히처리
python + er = pyther

,

XingAPI COM 사용하기

XingAPI 2018. 6. 14. 00:02

XingAPI는 COM과 DLL로 제공한다. python에서 COM을 사용하는 방법은 여기를 참고하면 된다.

COM을 사용하기 위해서 win32com.client를 import하고 win32com.client.DispatchWithEvents()로 COM 객체를 만들면 된다. DispatchWithEvents()에 2개의 인자가 전달된다. 첫번째는 COM이름, 두번째는 이벤트 콜백시 호출될 클래스명이다.

XingAPI는 3개의 COM이 제공된다.

  • XA_Session.XASession
  • XA_DataSet.XAQuery
  • XA_DataSet.XAReal

각 COM에는 콜백으로 사용되는 이벤트 함수들이 정해져 있다. 예로 들어 XASession에서는 서버에서 로그인 요청이 끝나면 발생하는 Login()과 서버와 연결이 끊어졌을 때 발생하는 Disconnect()가 있다. 그래서 XA_Session.XASession을 사용할 때는 이벤트 콜백시 호출될 OnLogin()과 OnDisconnect()를 포함하는 클래스가 필요하다. 특이한 점은 클래스의 인스턴스(객체)를 인자로 사용하지 않고, 클래스명을 사용한다는 점이다.

DispatchWithEvents()시 COM객체가 만들어지는데, 이때 이벤트 콜백시 호출될 클래스도 같이 다중상속되어서 만들어진다. 그래서 COM객체의 기능과 이벤트 콜백시 호출될 클래스의 기능도 모두 사용할 수 있게 된다.

import win32com.client


class XASessionEventHandler:
    def __init__(self):
        self.parent = None
        self.is_login = False
        self.is_waiting_message = False

    def OnLogin(self, code, msg):
        self.is_login = True if code == "0000" else False
        self.is_waiting_message = False
        if self.parent:
            self.parent.on_login(code, msg)

    def OnDisconnect(self):
        self.is_login = False
        self.is_waiting_message = False
        if self.parent:
            self.parent.on_disconnect()


class XASession:
    def __init__(self, parent=None):
        self.session = win32com.client.DispatchWithEvents("XA_Session.XASession", XASessionEventHandler)
        self.session.parent = parent

    def login(self, id, passwd, cert_passwd="", server="demo.ebestsec.co.kr"):
        # server: demo.ebestsec.co.kr / hts.ebestsec.co.kr
        is_connect = self.session.ConnectServer(server, 20001)
        if not is_connect:
            return False

        is_request = self.session.Login(id, passwd, cert_passwd, 0, 0)
        if not is_request:
            return False

        self.session.is_waiting_message = True
        return True

XASession 클래스에서 DispatchWithEvents()로 만들어진 COM객체에서 XASessionEventHandler클래스의 parent속성에 접근할 수 있는 점을 보면 XA_Session.XASession과 XASessionEventHandler가 다중상속되었다는 것을 볼 수 있다.

'XingAPI' 카테고리의 다른 글

32bit python36 설치하기  (0) 2018.06.11

WRITTEN BY
히처리
python + er = pyther

,

XingAPI를 사용하려면 python이 32bit용으로 설치되어야 한다. 만일 python이 64bit로 설치되어 있다면 conda env를 사용하여 64bit에 32bit를 추가로 설치하면 된다.

 

set CONDA_FORCE_32BIT=1
conda create -n py32bit python=3.5 anaconda

 

출처: http://mufflemumble.tistory.com/2

'XingAPI' 카테고리의 다른 글

XingAPI COM 사용하기  (0) 2018.06.14

WRITTEN BY
히처리
python + er = pyther

,

conda 번역사이트

conda 2018. 6. 11. 14:52

https://veranostech.github.io/docs-korean-conda-docs/docs/build/html/index_ko.html

 

 


WRITTEN BY
히처리
python + er = pyther

,