お世話になっております。普段Rubyを使っていてPythonは不慣れです。

さて、ある外部コマンド hdfs dfsadmin -report をPythonから実行して、その結果をPythonで分析したいと思っています。コマンドの実行例は次のようなものです。

[name@computer directory]$ hdfs dfsadmin -report

Configured Capacity: 1285362095316992 (1.14 PB)
Present Capacity: 1257856203475973 (1.12 PB)
DFS Remaining: 559059066211639 (508.46 TB)
DFS Used: 698797137264334 (635.55 TB)
DFS Used%: 55.55%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0

-------------------------------------------------
Live datanodes (28):

Name: 172.xx.xx.xx:50010 (aaaa.example.com)
Hostname: aaaa.example.com
Rack: /default
Decommission Status : Normal
Configured Capacity: 47906392375296 (43.57 TB)
DFS Used: 25174247358464 (22.90 TB)
Non DFS Used: 33450402031 (31.15 GB)
DFS Remaining: 22698694614801 (20.64 TB)
DFS Used%: 52.55%
DFS Remaining%: 47.38%
Configured Cache Capacity: 4294967296 (4 GB)
Cache Used: 0 (0 B)
Cache Remaining: 4294967296 (4 GB)
Cache Used%: 0.00%
Cache Remaining%: 100.00%
Xceivers: 52
Last contact: Mon Apr 29 15:42:56 PDT 2019

[これが28個続く]

これに対して

import subprocess
import re

proc = subprocess.run(["hdfs", "dfsadmin", "-report"],stdout = subprocess.PIPE, stderr = subprocess.PIPE)
results = [ s for s in proc.stdout.decode("utf8").split('\n') if s ]

is_summary = True
summary = {}

for each in results:

    if is_summary == True:
        if each == "-------------------------------------------------":
            is_summary = False
        elif each.startswith("Configured Capacity"):
            m = re.search('Configured Capacity: (\d+) \((.*?)\)', each)
            summary['Configured Capacity'] = m.group(1)
            summary['Configured Capacity in human readable format'] = m.group(2)

for key in summary:
    print( '%s: %s' % (key, summary[key]))

のようなコードを書いていますが、これがよいコードなのか自信がありません。ご相談したいのは

  1. このような処理をする際の定石あるいは便利なライブラリやPythonの機能はありますか。
  2. Pythonの正規表現はRubyのように正規表現リテラルがない(らしい)ため冗長になりそうなのですが、それは普通ですか(単によい書き方を知らないだけでしょうか)。
  3. Live datanodes 以下は繰り返し構造になりそうなので、Name: \d+\.\d+\.\d+\.\d+\:\d+ \(.*?\) にマッチしたら次のレコード開始として正規表現で値を抜き出していくコードを書いていますが、これはPython的に妥当ですか?

初歩的な質問ですが、よろしくお願いします。