#author("2019-01-10T02:30:30+00:00","","") * Python覚え書き [#c3ed5c17] #setlinebreak(on) #contents -- 関連 --- [[Python]] --- [[Pythonのインストール]] --- [[Python のパッケージング]] --- [[PythonでAWS DynamoDBのCRUDを書いてみる]] --- [[Pythonのstrptimeが遅い]] --- [[Pythonのチューニング]] --- [[Pythonのパフォーマンス確認]] --- [[FizzBuzzで頭の体操]] --- [[pytest入門]] --- [[OpenSSLで電子署名の生成と署名検証]] --- [[pythonでWebサーバを書いてみる]] --- [[Flaskの基礎]] --- [[Djangoの基礎]] ** 日付文字列を datetime オブジェクトに変換する [#rf237495] #html(<div style="padding-left: 10px;">) #mycode2(){{ from datetime import datetime date_text = '2018-01-01T01:02:03Z' target_datetime = datetime.strptime(date_text, '%Y-%m-%dT%H:%M:%SZ') }} #html(</div>) ** datetime を 日付文字列に変換する [#c130a1e2] #html(<div style="padding-left: 10px;">) #mycode2(){{ from datetime import datetime target_datetime = datetime.now() date_text = target_datetime.strftime('%Y-%m-%dT%H:%M:%SZ') }} #html(</div>) ** 日付の加算 [#z0ebfe02] #html(<div style="padding-left: 10px;">) #mycode2(){{ from datetime import datetime from datetime import timedelta target_date = datetime.now() time_minutes = timedelta(minutes=int(minutes)) print(target_date + time_minutes) }} #html(</div>) ** 日時を年月日単位で切り捨てる [#n0f5aacf] #html(<div style="padding-left: 10px;">) datetime.timetuple で取得したタプルを、datetimeの引数に指定する事により、切り捨てられたdatetimeが得られる。 #mycode2(){{ from datetime import datetime def trunc_date(target_date): """ 日時を年月日単位で切り捨てる """ now_date_tuple = target_date.timetuple()[:3] # 年月日のタプルを取得 #now_date_tuple = target_date.timetuple()[:4] # 年月日時のタプルを取得 #now_date_tuple = target_date.timetuple()[:5] # 年月日時分のタプルを取得 return datetime(*now_date_tuple) print(trunc_date(datetime.now())) }} #html(</div>) ** With構文を使用して開始、終了処理を行う [#g1a8cbd7] #html(<div style="padding-left: 10px;">) __enter__ 及び __exit__ メソッドを持つクラスを with 構文と共に利用することで、開始、終了処理を行う事ができる。 sample_with.py #mycode2(){{ # coding: utf-8 class SampleWith(object): def __init__(self): print('\t with class init') def __enter__(self): # 開始処理 print('\t with class enter') def __exit__(self, exc_type, exc_value, tb): # 終了処理 print('\t with class exit') if __name__ == '__main__': print('start') with SampleWith() as sample: print('\t\t internal start') for i in range(10): print(f'\t\t\t point {i:05d}') print('\t\t internal end') print('end') }} 実行結果 #myterm2(){{ $python3 sample_with.py start with class init with class enter internal start point 00000 point 00001 point 00002 point 00003 point 00004 point 00005 point 00006 point 00007 point 00008 point 00009 internal end with class exit end }} #html(</div>) ** リストをマージする [#xc9fc025] #html(<div style="padding-left: 10px;">) #mycode2(){{ l1 = ['abc', 'def'] l2 = ['ghi', 'jkl'] l1.extend(l2) print(l1) }} 結果 #myterm2(){{ ['abc', 'def', 'ghi', 'jkl'] }} #html(</div>) ** リストをマージして別のリストを作る [#bbc1b8a5] #html(<div style="padding-left: 10px;">) #mycode2(){{ l1 = ['abc', 'def'] l2 = ['ghi', 'jkl'] l3 = l1 + l2 print(l3) }} 結果 #myterm2(){{ ['abc', 'def', 'ghi', 'jkl'] }} #html(</div>) ** dictをマージする [#x44207a4] #html(<div style="padding-left: 10px;">) #mycode2(){{ d1 = {'var1': 'abc', 'var2': 'def'} d2 = {'var3': 'ghi', 'var4': 'jkl'} d3 = {**d1, **d2} print(d3) }} 結果 #myterm2(){{ {'var1': 'abc', 'var2': 'def', 'var3': 'ghi', 'var4': 'jkl'} }} #html(</div>) ** dictのリストの各要素に値を追加/変更する [#r1e2ee78] #html(<div style="padding-left: 10px;">) #mycode2(){{ l1 = [ {'var1': 'a1', 'var2': 'b1'}, {'var1': 'a2', 'var2': 'b2'} ] # 各要素にvar3を追加 l2 = [{**x, **{'var3': f'c{i+1}'}} for i, x in enumerate(l1)] print(f'l2: {l2}') # 各要素のvar1の値を変更 l3 = [{**x, **{'var1': f'X{i+1}'}} for i, x in enumerate(l1)] print(f'l3: {l3}') }} 結果 #myterm2(){{ l2: [{'var1': 'a1', 'var2': 'b1', 'var3': 'c1'}, {'var1': 'a2', 'var2': 'b2', 'var3': 'c2'}] l3: [{'var1': 'X1', 'var2': 'b1'}, {'var1': 'X2', 'var2': 'b2'}] }} #html(</div>) ** リストをソートする [#ebe7559a] #html(<div style="padding-left: 10px;">) #mycode2(){{ # 元リスト自体を変更する l1 = [10, 1, 5, 3, 4, 6, 7] l1.sort() print(f'l1: {l1}') l1.sort(reverse=True) print(f'l1(reverse): {l1}') # 結果を別リストに格納する l1 = [10, 1, 5, 3, 4, 6, 7] l2 = sorted(l1) print(f'l2: {l2}') l2 = sorted(l1, reverse=True) print(f'l2(reverse): {l2}') # dictのリストを特定のキーでソートする from operator import itemgetter dict_list = [ {'var1': 1, 'var2': 4, 'var3': 'c'}, {'var1': 4, 'var2': 2, 'var3': 'd'}, {'var1': 2, 'var2': 3, 'var3': 'a'}, {'var1': 3, 'var2': 1, 'var3': 'b'} ] sorted_dict_list = sorted(dict_list, key=itemgetter('var2')) # var2の値でソートする print(f'sorted_dict_list: {sorted_dict_list}') }} 結果 #myterm2(){{ l1: [1, 3, 4, 5, 6, 7, 10] l1(reverse): [10, 7, 6, 5, 4, 3, 1] l2: [1, 3, 4, 5, 6, 7, 10] l2(reverse): [10, 7, 6, 5, 4, 3, 1] sorted_dict_list: [{'var1': 3, 'var2': 1, 'var3': 'b'}, {'var1': 4, 'var2': 2, 'var3': 'd'}, {'var1': 2, 'var2': 3, 'var3': 'a'}, {'var1': 1, 'var2': 4, 'var3': 'c'}] }} #html(</div>) ** デコレータを使用する [#zf5965c3] #html(<div style="padding-left: 10px;">) [[Pythonのデコレータ]] を参照 #html(</div>)