- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-12-13T11:30:56+00:00","","")
#author("2019-01-03T16:25:27+00:00","","")
* Python覚え書き [#c3ed5c17]
#setlinebreak(on)
#contents
-- 関連
--- [[Python]]
--- [[Pythonのインストール]]
--- [[Python のパッケージング]]
--- [[PythonでAWS DynamoDBのCRUDを書いてみる]]
--- [[Pythonのstrptimeが遅い]]
--- [[Pythonのチューニング]]
--- [[Pythonのパフォーマンス確認]]
--- [[FizzBuzzで頭の体操]]
--- [[pytest入門]]
--- [[OpenSSLで電子署名の生成と署名検証]]
--- [[pythonでWebサーバを書いてみる]]
--- [[Python FlaskでWebアプリ作成]]
--- [[Python DjangoでWebアプリ作成]]
** 日付文字列を 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>)