tabulate 모듈을 사용해서 공통으로 작성했습니다.

지원하는 tablefmt중에서 'presto' 양식으로 처리했습니다.

 

 

import re
from tabulate import tabulate


def get_string_dataframe(df, pivot_yn=True, index_drop=True):
    """DataFrame의 TEXT출력 문자를 반환한다."""
    if pivot_yn:
        df = df.T

    if index_drop:
        df = df.reset_index(drop=index_drop)

    body = tabulate(df, headers='keys', tablefmt='presto', disable_numparse=True)
    hindex = body.index('\n')
    header = body[:hindex]
    newheader = re.sub('[ ]{2,}', ' ', header)
    body = header[:header.index('|') + 1] + newheader[newheader.index('|') + 1:] + '\n' + body[hindex + 1:]
    return body
    
def test_get_string_dataframe():
    data = {'18498': {'종목코드': '003960', '종목명': '사조대림', '주문번호': '18498', '주문상태': '체결', '주문수량': 37, '주문가격': 27700, '현재가': 27600, '주문구분': '매도', '미체결수량': 0, '체결량': 37, '시간': '090552', '당일매매수수료': 3580, '당일매매세금': 2357},
            '18308': {'종목코드': '073560', '종목명': '우리손에프앤지', '주문번호': '18308', '주문상태': '체결', '주문수량': 480, '주문가격': 2135, '현재가': 2140, '주문구분': '매도', '미체결수량': 434, '체결량': 46, '시간': '090542', '당일매매수수료': 300, '당일매매세금': 227},
            '16975': {'종목코드': '307930', '종목명': '컴퍼니케이', '주문번호': '16975', '주문상태': '접수', '주문수량': 54, '주문가격': 8920, '현재가': 8820, '주문구분': '매도', '미체결수량': 54, '체결량': 0, '시간': '090432', '당일매매수수료': 0, '당일매매세금': 0},
            '16923': {'종목코드': '001120', '종목명': 'LX인터내셔널', '주문번호': '16923', '주문상태': '체결', '주문수량': 61, '주문가격': 30450, '현재가': 30400, '주문구분': '매도', '미체결수량': 0, '체결량': 61, '시간': '090428', '당일매매수수료': 6490, '당일매매세금': 4273},
            '16819': {'종목코드': '084010', '종목명': '대한제강', '주문번호': '16819', '주문상태': '체결', '주문수량': 21, '주문가격': 22000, '현재가': 21650, '주문구분': '매도', '미체결수량': 0, '체결량': 21, '시간': '090423', '당일매매수수료': 1600, '당일매매세금': 1062},
            '16780': {'종목코드': '010060', '종목명': 'OCI', '주문번호': '16780', '주문상태': '체결', '주문수량': 4, '주문가격': 110500, '현재가': 111000, '주문구분': '매도', '미체결수량': 0, '체결량': 4, '시간': '090421', '당일매매수수료': 1540, '당일매매세금': 1017},
            '13708': {'종목코드': '017480', '종목명': '삼현철강', '주문번호': '13708', '주문상태': '체결', '주문수량': 73, '주문가격': 6690, '현재가': 6560, '주문구분': '매도', '미체결수량': 0, '체결량': 73, '시간': '090213', '당일매매수수료': 1700, '당일매매세금': 1123},
            '13699': {'종목코드': '008260', '종목명': 'NI스틸', '주문번호': '13699', '주문상태': '체결', '주문수량': 96, '주문가격': 5030, '현재가': 4895, '주문구분': '매도', '미체결수량': 0, '체결량': 96, '시간': '090213', '당일매매수수료': 1690, '당일매매세금': 1110},
            '13698': {'종목코드': '006800', '종목명': '미래에셋증권', '주문번호': '13698', '주문상태': '체결', '주문수량': 124, '주문가격': 8260, '현재가': 8270, '주문구분': '매도', '미체결수량': 0, '체결량': 124, '시간': '090213', '당일매매수수료': 3560, '당일매매세금': 2356},
            }

    df = pd.DataFrame(data)
    print(get_string_dataframe(df))


if __name__ == "__main__":
    test_get_string_dataframe()

#     | 종목코드 | 종목명 | 주문번호 | 주문상태 | 주문수량 | 주문가격 | 현재가 | 주문구분 | 미체결수량 | 체결량 | 시간 | 당일매매수수료 | 당일매매세금
# ----+--------+---------+--------+--------+--------+--------+--------+--------+---------+-------+--------+-----------+----------
#  0  | 003960 | 사조대림    | 18498  | 체결     | 37     | 27700  | 27600  | 매도     | 0       | 37    | 090552 | 3580      | 2357
#  1  | 073560 | 우리손에프앤지 | 18308  | 체결     | 480    | 2135   | 2140   | 매도     | 434     | 46    | 090542 | 300       | 227
#  2  | 307930 | 컴퍼니케이   | 16975  | 접수     | 54     | 8920   | 8820   | 매도     | 54      | 0     | 090432 | 0         | 0
#  3  | 001120 | LX인터내셔널 | 16923  | 체결     | 61     | 30450  | 30400  | 매도     | 0       | 61    | 090428 | 6490      | 4273
#  4  | 084010 | 대한제강    | 16819  | 체결     | 21     | 22000  | 21650  | 매도     | 0       | 21    | 090423 | 1600      | 1062
#  5  | 010060 | OCI     | 16780  | 체결     | 4      | 110500 | 111000 | 매도     | 0       | 4     | 090421 | 1540      | 1017
#  6  | 017480 | 삼현철강    | 13708  | 체결     | 73     | 6690   | 6560   | 매도     | 0       | 73    | 090213 | 1700      | 1123
#  7  | 008260 | NI스틸    | 13699  | 체결     | 96     | 5030   | 4895   | 매도     | 0       | 96    | 090213 | 1690      | 1110
#  8  | 006800 | 미래에셋증권  | 13698  | 체결     | 124    | 8260   | 8270   | 매도     | 0       | 124   | 090213 | 3560      | 2356

 

그리고, DataFrame을 바로 출력할 때는 아래 설정으로 포맷을 조정할수 있습니다.

# pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.colheader_justify', 'left')
# pd.set_option('display.precision', 10)

print(df.to_markdown(index=False))
728x90

'Programming Language > Python' 카테고리의 다른 글

dataframe 출력 사이즈 설정  (0) 2022.05.31
Python 모듈 실행시 ModuleNotFoundError 처리  (0) 2022.03.25
[Python] 클래스  (0) 2022.03.14
[Python] 모듈과 패키지  (0) 2022.03.14
[Python] 내장함수  (0) 2022.03.14

1. Class 선언
  - 클래스명은 캐멀 표기법으로 한다. 첫 글자는 대문자.
  - self : 클래스의 메소드 위치 기본 변수로 항상 정의해야 하지만, 메소드 호출 시에는 없는 것 처럼 사용한다.
  - 클래스 변수 : 클래스 내의 함수 밖에 정의된 변수는 클래스 변수가 된다.
  - 인스턴스 변수 : ___init__() 함수에서 인스턴스 변수를 선언한다.

2. 데이터 은닉과 이름 장식
    - 변수를 은닉하기 위해서는 '__변수명' 양식으로 정의한다.
    - 은닉된 인스턴스 변수는 외부에서 접근할 수 없지만, 클래스 변수는 '클래스._클래스__변수명'으로 접근할 수 있다.

3. 상속
    - 다중상속과 다형성 지원한다.
    - 객체의 클래스타입 확인 방법: 객체.__class__  또는 type(객체)
    - 부모클래스 확인 방법: 클래스명.__bases__
    - __main__ : 실행환경 최상단 위치라는 의미
    - super() 지시어. 자식 객체에서 부모 객체를 접근하게 해준다. 부모의 메소드를 호출할 때 주로 사용한다.

4. Class 정의 예

    class SuperMan(Human, Man):         # 다중상속이 가능한다.
        __country = 'South Korea'       # 클래스 변수. 변수 은닉. Dog._Dog__country 로 호출
        def __init__(self, name):       # 초기화 메소드. 생성자와 유사
            self.name = name
            self.tricks = []
        def fly(self):
            super().fly()               # 부모 메소드 호출
            print(self.name + ' can fly faster.')

 

end.

 

728x90


 1. 모듈 : 재사용하고자 하는 함수 / 클래스의 집합.
  - 모듈명 : 소스 파일 명이 곧 모듈명이 된다.


 2. 패키지 : 모듈의 집합체로, 모듈을 특정 기준에 따라 모아 놓은 단위를 패키지로 하고, 디렉토리 구조를 사용한다.

    - 패키지(디렉토리) > 모듈(파일)

 

ps. Python 콘솔에서 모듈 정보를 조회할 수 있다.

>>> help('modules')
Please wait a moment while I gather a list of all available modules...
OpenSSL             _uuid               imaplib             reprlib
PIL                 _warnings           imghdr              requests
__future__          _weakref            imp                 resource
_abc                _weakrefset         importlib           rlcompleter
... 중략

 3. 모듈 import 방법 : import 문을 사용하여 호출한다.

import 패키지명.모듈명
import 모듈명

from 패키지명 import 모듈명
from 모듈명 import 클래스명, 함수명 등

from ~ import ~ as 별칭


import sound.effects.echo
sound.effect.echo.echofilter(input, ouput) # import 문만 사용하면, 패키지를 모두 기술해야 한다
 
from sound.effects import echo
echo.echofilter(input, output)        # import 문으로 상위 패키지만 선언하면, 모듈로 호출 기술.

from sound.effects.echo import echofilter
echofilter(input, output)             # import 문으로 모듈까지 선언하면, 함수를 바로 호출 가능.

 

4. 패키지 구조 예
sound/                 # Top-level package
    __init__.py      # 패키지 파일로, 파이썬은 패키지로 인식한다. 패키지 내의 모든 공통적을 사용할 속성등을 정의할 수 있다.

    formats/          # sub-package
        __init__.py

        wavread.py

    effects/
        __init__.py

end.

728x90

'Programming Language > Python' 카테고리의 다른 글

[Python] pandas - DataFrame Text 출력  (0) 2022.03.19
[Python] 클래스  (0) 2022.03.14
[Python] 내장함수  (0) 2022.03.14
[Python] 문자열 포맷 출력  (0) 2022.03.14
[Python] 판다스 pands 필터링, 정렬, 랭크  (0) 2022.03.12

참조: https://docs.python.org/3.9/library/functions.html

생소한 함수도 많네요. ㅋ

 

728x90

'Programming Language > Python' 카테고리의 다른 글

[Python] 클래스  (0) 2022.03.14
[Python] 모듈과 패키지  (0) 2022.03.14
[Python] 문자열 포맷 출력  (0) 2022.03.14
[Python] 판다스 pands 필터링, 정렬, 랭크  (0) 2022.03.12
[Python] 판다스 pandas 기본  (0) 2022.03.12

+ Recent posts