セイウチ演算子(walrus operator)でコードをちょっと短く、行数をちょっと少なく
奥村晴彦さん(Haruhiko Okumura @h_okumura)のCOCOAデータを読むのPythonのコードのインデントが深いのがちょっと気になったから、それを修正したコードを書いてみた。ついでに比較的最近追加されたセイウチ演算子(walrus operator)を利用して、ちょっとだけコードの行数を減らしてみた。
count.py
#!/usr/bin/env python3
import sys
import json
def show(filename, d):
print()
print(filename)
for k in ["Hash", "MatchCount", "Timestamp"]:
print(k, d[k])
def match_count(filename, d):
if d['MatchCount'] != 0:
show(filename, d)
for filename in sys.argv[1:]:
with open(filename) as f:
d = json.load(f)
if (version := d["ExportVersion"]) == 1:
for i in d["ExposureChecks"]:
match_count(filename, i)
elif version == 2:
for i in d["ExposureChecks"]:
for j in i["Files"]:
match_count(filename, j)
else:
print(filename, "Unknown ExportVersion:", version)
これからもバージョンが増えていく場合は、セイウチ演算子を利用したのが多少役立つかも。
log.py
#!/usr/bin/env python3
import re
import sys
from zipfile import ZipFile
def show(name, z):
with z.open(name) as f:
for b in f:
if re.search('^.*?,"Error",', (line := b.decode('utf-8')):
print(line)
for arg in sys.argv[1:]:
with ZipFile(arg) as z:
for name in z.namelist():
show(name, z)
1つ目のコードでshow関数が使われてたから、こちらもshow関数を定義して、ちょっとインデントの深さを減らしてみた。
どちらのコードも、修正したところで読みやすくなったかどうかは…
あと、手元にCOCOAデータのJSON形式のファイルがないから実際に動くかテストしてないです。