Skip to content

miyagaw61/enert

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

enert - Python Utils Library.

Twitter MIT License

install

pip install git+https://github.com/miyagaw61/enert

Usage

  • import
from enert import *

Fileクラス

file_name = "a.out"
f = File(file_name)
  • 編集
f.edit()
  • 行数取得
f.lines()
  • データ読み込み 失敗した時はbytes型になります
f.read()
  • データを行ごとに読み込み
f.readlines()
  • 制御文字を削除してデータ読み込み
f.white_read()
  • 制御文字を削除してデータを行ごとに読み込み
f.white_readlines()
  • 書き込み
f.write("hoge\n")
  • 追記
f.add("hoge\n")
  • 存在するかどうか調査
f.exist()
  • 削除
f.rm()
  • バイナリとして読み込み
f.binary()
  • バイナリをn文字ごとにsplitしてリスト化して読み込み
f.binary(n)

Shellクラス

cmd = Shell("ls | grep *.txt")
  • コマンド実行
cmd.call()
  • コマンドの出力を取得
stdout_str, stderr_str = cmd.get()

Menuクラス

手軽にmenuが作成できる。

from enert import *

lst = ["1. hogehoge", "2. fugafuga", "3. piyopiyo"]
def function(i):
    m.menu_exit()
    print(lst[i])
    exit()
m = Menu(lst, function)

print('Please input "j" or "k" or "Enter".')
m.menu_start()

制御関数群

ターミナルを制御する関数群

  • カーソルをn文字上へ移動
up(n)
  • カーソルをn文字下へ移動
down(n)
  • カーソルをn桁目へ移動
to(n)
  • 現在のカーソルの位置を保存
save()
  • 保存したカーソルの位置を復元
restore()
  • 現在の行をすべてクリア
all_delete()
  • 現在の行の先頭からn桁目までをクリア
head2n_delete(n)
  • 現在の行のn桁目から行末までをクリア
n2tail_delete()
  • 現在の行からn行下までクリア
lines_delete(n)
  • clear(Ctrl+l)する
clear()

Screenクラス

制御関数と組み合わせて独自のmenuを作成する際に便利です。

  • 原点を作成
s = Screen()
  • 原点を更新
save()
  • 原点を元にした座標に出力
s.addstr(x, y, strings)
  • example
from enert import *

lst = ["hogehoge", "fugafugafugafuga", "piyopiyopiyo"]
sys.stdout.write("Your Choise : ")
s = Screen()
print("\n====================")
print(black_red("> ", "bold") + black_white(lst[0], "bold"))
print("  " + lst[1])
print("  " + lst[2])
print("====================")
i = 0
header = 2
footer = 1
up(header+len(lst)+footer)
sys.stdout.write("Your Choise : ")
save()
while 1:
    key = getch()
    if (key == "j" or ord(key) == DOWN) and i < len(lst)-1:
        old = i
        i = i + 1
        s.addstr(1, header+old, "  " + lst[old])
        s.addstr(1, header+i, black_red("> ", "bold") + black_white(lst[i], "bold"))
    elif (key == "k" or ord(key) == UP) and i > 0:
        old = i
        i = i - 1
        s.addstr(1, header+old, "  " + lst[old])
        s.addstr(1, header+i, black_red("> ", "bold") + black_white(lst[i], "bold"))
    elif ord(key) == ENTER:
        restore()
        all_delete()
        sys.stdout.write("Your Choise : ")
        sys.stdout.write(lst[i])
        save()
        sys.stdout.flush()
    elif key == "q" or ord(key) == CTRL_C or ord(key) == CTRL_D:
        lines_delete(100)
        exit()

enerdict型

dict型(辞書型)を継承して作成したdict型の上位互換です

  • 宣言
dct = enerdict(one='1', two='2', three='3')
  • キーのリストをビュー型ではなく完全なリスト型で返却
dct.keys
  • 値のリストをビュー型ではなく完全なリスト型で返却
dct.values
  • n番めのキーを取得
dct.keys[n]
  • n番めの値を取得
dct.values[n]
  • リストのような形で返却
dct.list
  • 要素追加
dct['four'] = '4' #Please use this.
#dct.append(five='5')   #You can use this, BUT don't use this!
#dct.append('six', '6') #You can use this, BUT don't use this!
  • example
dct = enerdict(zero="0", one="1", two="2", three="3")

#>>> dct
#>>> {'zero': '0', 'one': '1', 'two': '2', 'three': '3'}
#>>> dct.keys[1]
#>>> "one"
#>>> dct.values[3]
#>>> "3"
#>>> dct.list
#>>> [['zero', '0'], ['one', '1'], ['two', '2'], ['three', '3']]

for key in dct:
    print(key)
#>>> zero
#>>> one
#>>> two
#>>> three

for key,value in dct.list:
    print("key is " + key + ", value is " + value)
#>>> key is zero, value is 0
#>>> key is one, value is 1
#>>> key is two, value is 2
#>>> key is three, value is 3

dct['four'] = '4'

for key,value in dct.list:
    print("key is " + key + ", value is " + value)
#>>> key is zero, value is 0
#>>> key is one, value is 1
#>>> key is two, value is 2
#>>> key is three, value is 3
#>>> key is four, value is 4

その他

  • 文字に色を付与
red_hoge = red("hoge")
bold_green_fuga = green("hoge", "bold")
background_black_fontcolor_white = black_white("hoge", "bold")
  • valueをn桁の2の補数表現で表現
complement(value, n)
  • 文字列strをn文字ごとにsplit
strings = "hogefugapiyo"
n = 4
lst = splitn(strings, n)
print(lst) # -> ["hoge", "fuga", "piyo"]
  • ターミナルのサイズを取得
size_y, size_x = get_term_size()
  • 文字列をファイルに書き込む
buf = "hoge"
writefile(buf, "buf.txt")
  • リアルタイムで文字を読み込む
while 1:
    key = getch()
    if key == "q":
        print("Exit.")
        exit()
    elif ord(key) == ENTER:
        print("ENTER!!!")
    elif key:
        print(key)
  • Usageをパースして表示

これを使えば、サブコマンド形式とオプション形式をどちらも採用しているスクリプトを簡単に作ることができる。(サブコマンド形式のルーチンのみこのコマンドを使用)

Usage: parse_usage(str usage, list args)
Example usage: 'git [commit <-m>] [push <branch>]'
Example args: ['commit [-m <comment>]:commit to local repository', 'push [branch]:push to remote repository']
  • parserの基本骨格を作成

これを使えば、簡単にパーサーの基本骨格を作成することが可能

parser_A = mkparser(usage)
parser_B = mkparser(usage, ['add', 'commit'])
parser_A.add_argument('-a', '--all', action='store_true')
  • リスト二つを比較して、一致するものが一つでもあるかどうかを調査

一致するものが一つでもあれば1を返す。

list_check(listA, listB)
  • helpを表示すべきかどうか調査

lstの中に-hもしくは--helpが存在すれば1を返す。また、argc < idxを満たせば1を返す。

help() -> help(lst=argv, idx=None)
help(lst=lstA) -> help(lst=lstA, idx=None)
help(idx=3) -> help(lst=argv, idx=3)
  • 詳細なdir
import enert

class Hoge():
    def my_method(self, hoge, fuga=123, piyo="abc", **kwargs):
        print(hoge, fuga, piyo, repr(kwargs))

enert.exdir(Hoge)
############################################
#   <class '__main__.Hoge'> - UNCALLABLE   #
############################################

__dict__
__doc__
__module__
__weakref__

############################################
#    <class '__main__.Hoge'> - CALLABLE    #
############################################

...
__gt__(self, value)
__hash__(self)
__init__(self, *args, **kwargs)
...
my_method(self, hoge, fuga=123, piyo='abc', **kwargs)
  • search()

  • search_binary()

  • to_ascii()

  • get_now()

  • to_binary()

  • split_byte()

  • int2bins()

  • int2bin()

  • bin2ints()

  • bin2int()

  • bin2hexes()

  • bin2hex()

  • hex2bins()

  • hex2bin()

  • hex2ints()

  • hex2int()

  • int2hexes()

  • int2hex()

  • sanitize()

  • pad()

  • unpad()

  • Ssl