Home Python
Post
Cancel

Python

파일 크기 확인하는 법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
### Simple way
import os
b = os.path.getsize("/path/aaa.txt")

### Another way 1
import os
statinfo = os.stat("somefile.txt")
statinfo.st_size

### Another way 2
import os
with open("somefile.txt", 'r') as f:
    f.seek(0, os.SEEK_END)
    size = f.tell()
### Abstract Class

필요 Module을 Import
```python
import abc

### 사용성을 위해 다음의 코드가 추천됨
from abc import ABC, abstractmethod, ABCMeta

Abstract Class 구현

1
2
3
4
5
6
7
8
9
10
11
class AbstractClassExample(ABC):

    __metaclass__ = ABCMeta
 
    def __init__(self, value):
        self.value = value
        super().__init__()
    
    @abstractmethod
    def do_something(self):
        pass

구현된 Abstract Class 사용

1
2
3
4
5
6
7
8
9
10
11
class ClassExample(AbstractClassExample):
    def __init(self):
        super().__init__()

    ### Abstract Method를 구현하지 않으면 Error 발생
    def do_something(self):
        print("something")

    ### Method Overloading 개념도 가능
    def do_something(self, data):
        print(data)

정적 타입

1
2
def typing_example(param_1: int, param_2: str="default") -> str:
    return "example"

String Formatting

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#### 전체 자리수=8, 소수점은 2자리까지 반올림
print("num: {:8.2f}".format(num))

#### 왼쪽 정렬 및 빈 공간 0으로 채우기 
print("num: {:0<8.2f}".format(num))

#### 오른쪽 정렬 및 빈 공간 0으로 채우기 
print("num: {:0>8.2f}".format(num))

#### 오른쪽 정렬 및 빈 공간 *로 채우기 
print("num: {:*>8.2f}".format(num))
print("="*20)

s = "Taelim Hwang"
print(s)
print("{:|>30s}".format(s))
print("{:|<30s}".format(s))

Hash 사용하기

내장함수 hash의 경우, 3.4 버전 이상부터 Process에 따라 다른 Hash Value가 return 되므로 사용 지양

1
2
3
4
5
6
python -c "print(hash('123'))"
8180009514858937698
python -c "print(hash('123'))"
-3358196339336188655
python -c "print(hash('123'))"
-5852881486981464238

hashlib 사용

1
2
3
4
5
6
import hashlib

### sha256, sha1, md5 등 hash algorithm 선택
### input value는 encode()를 통해 unicode로 변환되어야 한다
### hexdigest()로 16진수의 hex값으로 hash value 출력
hsahlib.sha256(input_value.encode()).hexdigest()

String split 시, 뒤의 1개만 분리하고 싶을 경우

1
2
3
4
"a b c,d,e,f".rsplit(',', 1)

### Return value
['a b c,d,e', 'f']

Function을 argument로 전달하면서 해당 function의 argument 또한 넘기고 싶을 경우

1
2
3
4
5
6
7
8
9
10
11
12
def a(x, y):
    print x, y

def b(other, function, *args, **kwargs):
    function(*args, **kwargs)
    print other

b('world', a, 'hello', 'dude')

### Return value : 
hello dude
world

Time check하는 decorator 짜기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### 정의
def check_time(function):
    def wrapper_func(*args, **kwargs):
        start_time = datetime.datetime.now()
        result = function(*args, **kwargs)
        end_time = datetime.datetime.now()
        logger.set_log('DEBUG', "Time elapsed {check_time}".format(check_time=end_time - start_time), extra={'classAndFunc': function.__qualname__})
        return result
    return wrapper_func

### 사용법 1 : With decorator
@check_time
def func():
    mssql_conn = MSSQLConnector(region='qv25')
    mssql_conn.get_data_query("SELECT * FROM displays_history")

func()

### 사용법 2 : 정의된 함수를 측정하고 싶을 경우
check_time(func())

Class 및 Function name 확인하기

1
2
3
4
5
6
7
8
9
10
11
12
def my_function():
    pass

class MyClass(object):
    def method(self):
        pass

print(my_function.__name__)         ### gives "my_function"
print(MyClass.method.__name__)      ### gives "method"

print(my_function.__qualname__)     ### gives "my_function"
print(MyClass.method.__qualname__)  ### gives "MyClass.method"

Logging

기본 사용법

1
내용 추가

추가로 표시하고 싶은 값이 있을 경우

1
2
3
4
5
FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logger = logging.getLogger('tcpserver')
logger.warning('Protocol problem: %s', 'connection reset', extra=d)

Coroutine(asyncio)

1
https://iscinumpy.gitlab.io/post/a-simple-introduction-to-asyncio/

Integer to String 시 앞부분 0으로 채우기

1
str(1).zfill(2) ### '01'

프로젝트의 구조

내용 추가 필요

파이썬이 느린 이유

http://jakevdp.github.io/blog/2014/05/09/why-python-is-slow/

list1에 있는 요소가 다른 list2에 있는지 확인하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
### List of string 
list1 = ['Hi' ,  'hello', 'at', 'this', 'there', 'from']
 
### List of string
list2 = ['there' , 'hello', 'Hi']

### check if list1 contains all elements in list2
result =  all(elem in list1  for elem in list2)
 
if result:
    print("Yes, list1 contains all elements in list2")    
else :
    print("No, list1 does not contains all elements in list2"

### check if list1 contains any elements of list2
result =  any(elem in list1  for elem in list2)
 
if result:
    print("Yes, list1 contains any elements of list2")    
else :
    print("No, list1 contains any elements of list2")

Traceback 사용을 통한 exception handling

1
2
3
4
5
import traceback
try:
    <blah>
except IndexError:
    traceback.print_exc()

Super class 변수 참조

1
2
3
4
5
6
7
8
9
10
class PostgreSQLConnector(MSSQLConnector):
    ### MSSQLConnector 클래스 상속 후 사용한다
    def __init__(self, db_config_dir: str="configuration/postgresql_config.json", region: str="kr"):
        super().__init__(db_config_dir=db_config_dir, region=region, driver='{PostgreSQL Unicode}')
        if self.conn_obj is None:
            raise InitConnectorError(PostgreSQLConnector)

### 위의 예제에서 conn_obj attribute는 Super class에서 생성 시 할당되는 부분이다
### 이를 하위 child class에서 사용하려면 super().conn_obj 가 아니라
### self.conn_obj로 참조하면 된다

Package 만드는 법

내용 추가

참조 링크

Python ABC(Abstract Base Class)

Abstract Classes

정적 타입 선언

Python 출력 시 formatting

파이썬 프로젝트의 구조

프로세스에 따른 hash 결과가 다르다

Logging

Get class and function name

Asyncio

list a에 있는 요소가 다른 list b에 있는지 확인하기

Super class attribute 참조

Default arguments with *args and **kwargs

This post is licensed under CC BY 4.0 by the author.

Bokeh 사용법

Jupyter notebook 설치 및 사용법