■ 正規表現で探す
find() や match() などいらぬ。
hoge = 'Curry Hamburger Ramen' if re.search(r'Hamburg.*', hoge): print('Hakushon Great Demon King')
■ 正規表現の $1 置換 置き換え
\1
re.sub で書くときは \\1 です。
例)
res = re.sub(r'(\d+) (.*)', "\\1 と \\2", "1234 abcd")
■ 辞書←→JSON
辞書 → JSON
dict = {'name':'hoge','hp':100}
json_str = json.dumps(dict)JSON → 辞書
dict = json.loads(json_str)テキストファイルから辞書
path = '/home/ec2-user/hoge.json' with open(path) as f: dic = json.load(f)
■ ファイル読み込み
テキストファイルから改行を削除してリスト化。( readlines() だと改行が付いて回るので)
filepath = '/home/ec2-user/hoge.txt' list = [] with open(filepath, 'r', encoding='shift_jis', errors='', newline='') as f: list = f.read().splitlines()
■ if を後ろにつける書き方
エレガントかな。
hoge.append(fuga['wara']) if fuga.get('wara') else Noneelse が無いとコケますので適当なこと書いときます。
■ 重複削除
ar = [1,2,3,4,5,4,3,2,1] ar = set(ar) ar = list(ar) print(ar) [1,2,3,4,5]else が無いとコケますので適当なこと書いときます。
■ 辞書の深い階層から値を採る
Python は無かったらコケますので。
例えば以下の辞書から c が欲しいとき
dict = { 'a': { 'b': { 'c': '2014-05-15' } } }↓
ymd = dict.get('a', {}).get('b', {}).get('c')これでコケません。
■ 辞書のリストのソート
gonsu = [ {"funa":"1001", "hoge":"002"}, {"funa":"1002", "hoge":"001"}, {"funa":"1001", "hoge":"001"} ] gonsu = sorted(gonsu, key=lambda x: (x['funa'], x['hoge'])) ↓ gonsu = [ {"funa":"1001", "hoge":"001"}, {"funa":"1001", "hoge":"002"}, {"funa":"1002", "hoge":"001"} ] (降順) gonsu = sorted(gonsu, key=lambda x: (x['funa'], x['hoge']), reverse=True)
■ 辞書のソート
キーで。
gonsu = {"hoge_02":"fuga", "hoge_01":"hage", "hoge_03":"funa"} gonsu = sorted(gonsu.items()) ↓ {"hoge_01":"hage", "hoge_02":"fuga", "hoge_03":"funa"} [('hoge_01', 'hage'), ('hoge_02', 'fuga'), ('hoge_03', 'funa')] (降順) gonsu = sorted(gonsu.items(), reverse=True)値で。
gonsu = {"hoge_02":"fuga", "hoge_01":"hage", "hoge_03":"funa"} gonsu = sorted(gonsu.items(), key=lambda i: i[1]) ↓ {"hoge_02":"fuga", "hoge_03":"funa", "hoge_01":"hage"} [('hoge_02', 'fuga'), ('hoge_03', 'funa'), ('hoge_01', 'hage')] (降順) gonsu = sorted(gonsu.items(), key=lambda i: i[1], reverse=True)
■ 配列のソート
gonsu = ["hage", "funa", "hoge"] gonsu.sort() ↓ ["funa", "hage", "hoge"] (降順) gonsu.sort(reverse=True)
■ 余白改行等の削除
hoge = hoge.strip("削除したい文字列") 引数を省略すると「空白」と「改行」が削除
hoge = hoge.lstrip("削除したい文字列") # 文字列の先頭から hoge = hoge.rstrip("削除したい文字列") # 文字列の末尾から
■ 2重ループを抜ける
こんな感じ。
for d1 in dis1: for d2 in dis2: if d1 == d2: # ループを終わらせたい条件 break else: continue break
■ ループ中に現在何週目か
enumerate() でくるみます。
例)下記では i 。 0 から始まります。
for i, hoge in enumerate(hogeArray): print(i)ついでに他のループ。
hogeA = ['ほげ','はげ','ふが'] for hoge in hogeA: print(hoge) ↓ ほげ はげ ふが辞書 (連想配列、ハッシュ)
hogeD = {'hoge':'ほげ', 'hage':'はげ', 'fuga':'ふが'} for hoge in hogeD: print(hoge) ↓ hoge hage fuga for hoge in hogeD.keys(): print(hoge) ↓ hoge hage fuga for hoge in hogeD.values(): print(hoge) ↓ ほげ はげ ふが for k, v in hogeD.items(): print(k, v) ↓ hoge ほげ hage はげ fuga ふが数字で
for i in range(-1,2): print(i) ↓ -1 0 1 2 cnt = 0 while cnt < 3: cnt += 1 print(cnt) ↓ 1 2 3
■ コマンド実行
import subprocess
単なる実行 cmd = "python hoge.py" proc = subprocess.Popen(cmd.strip().split(" "))
複数実行 for cmd in cmds: proc = subprocess.Popen(cmd.strip().split(" ")) proc.wait()
返り血 cmd = 'df -h' res = subprocess.check_output(cmd.strip().split(" ")) print(res)
■ 年月日
from datetime import datetime, timedelta today = datetime.now() yesterday = today - timedelta(1) tomorrow = today + timedelta(1) print(yesterday.strftime('%Y%m%d')) print(today.strftime('%Y%m%d')) print(tomorrow.strftime('%Y%m%d')) ↓ 20221204 20221205 20221206或いは、
import datetime today = datetime.datetime.now() tomorrow = today + datetime.timedelta(1)
■ コンフィグファイルに任意の変数名があるかないか
vi config.py HOGETEISUU = ["unko"]
import config if hasattr(config, 'HOGETEISUU') : print(config.HOGETEISUU)Python には定数がないので、別ファイルで変数を設定して定数っぽく使ったりするのですが(是非はおいといて)
■ Python の特徴。インデントとか
・Python はインデントで文章のかたまりを表します。
・{ } は有りません。
if hoge == 1 : # 条件文等の終わりは :
print(hoge)
elif hoge == 2 : # else if は elif です。
print(hoge)
else : # コメントは # から文末まで。まとめてくくるのは有りません。
print(hoge)
hoge = 92 # if と同じ階層
print()
・文末に ; は不要です。改行が文の終わりになります。
・変数に $ はいりません。
・ダブルクォーテーション、シングルクォーテーションの区別はありません。
・前に r を付けると確実にそのまま表示します。
例)
print('123\n456') # エスケープ文字を置換
123
456
print(r'123\n456') # そのまま表示
123\n456
■ 配列の結合
2つの配列をつなぐ
dat = [1,2,3]
dat2 = [4,5]
dat.extend(dat2)print(dat)
dat.append(4) dat.append(5)print(dat)
■ 配列←→CSV
配列 → CSV
arr = ['poodle1', 'poodl2', 'poodl3']
csv = ','.join(arr)CSV → 配列
arr = csv.split(',')
■ 最後の一文字がいらない
line = 'aaa,bbb,ccc,ddd,'
print(line[:-1])aaa,bbb,ccc,ddd
■ 前から〇〇文字
前から4文字: 文字.[0:4]
hoge = '20180223'
yyyy = hoge.[0:4]
■ 頭ゼロ埋め
2桁ゼロ埋め: 文字.zfill(2)
hoge = 2
mm = hoge.zfill(2)
■ NULL の判定
if hoge: は 0 や空白も含まれます。
if hoge is None: if hoge == None: (否定文) if hoge is not None: if hoge != None: