まぐらぼ

Unity/Android、Microsoft系のWPFをやってます。

pythonのtips

個人的な「あれどう書くんだっけ?」的なメモ

a)src文字列の中に{が含まれる否か。 FALSEを条件とするとき()は必要。

if ("{" in src) == False: # ()は必要
    out = src

#if "{" in src == False:だとダメ

b)LISTから重複の除去
list(set(temp_list))

c)ログ

        d = datetime.datetime.today()
        logging.debug( '%s時%s分%s.%s秒n' % (d.hour, d.minute, d.second, d.microsecond) )

d) 三項演算子
# A = Y if X else Z

e) flag処理

    def FlagOff(self,data):
        self._flag = (self._flag & ~data)
    def FlagOn(self,data):
        self._flag = self._flag  | int(data)

    def isFlag(self,data):
        if self._flag & data :
            return True
        else :
            return False


f) パスの正規化
out = os.path.normpath( "./hoge/moge/data/")

g) OrderdDict
python2.xではOrderdDictはない。辞書型はデータ格納順序を保持できない。

h) enum
# enum ( python 2.x ではenum未サポート )

i) 文字コードで嵌るところ

    target_str = ...
    ts.writelines( target_str.encode('utf-8') );

j) deepcopy・深いコピー
copy.deepcopy( my_data )

l) 文字列の末尾処理
n2 = n.rstrip("\r\n")

m) 時間計測

    starttime = datetime.datetime.now()
    heavywork() # 計測対象の処理
    print datetime.datetime.now()-starttime

n) m.group()の最大
マッチ後のm.group(n)の最大数を求める。

    for obj in in_list:
        m = check_regex.match(obj)
        if m:
            maxlen = len( m.groups()) +1
            for cnt in range(0, maxlen):
                print m.group(cnt)
            print "a"
        else:
            print "b"

o) その他

list = []
tuple = ()
try :
	nop()
except:
	nop()