File size: 2,484 Bytes
65c703b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import json
import sys


# 既存の関数 (extract_metadata と save_metadata_to_json) は変更せずに再利用できます。

def extract_metadata(_file_path, _start_marker):
    local_metadata = ""

    with open(_file_path, "rb") as f:
        content = f.read()
        start_pos = content.find(_start_marker)

        if start_pos != -1:
            end_pos = start_pos
            brace_count = 0
            for idx, b in enumerate(content[start_pos:]):
                if b == ord('{'):
                    brace_count += 1
                elif b == ord('}'):
                    brace_count -= 1

                if brace_count == 0:
                    end_pos += idx
                    break

            json_bytes = content[start_pos:end_pos + 1]
            content_str = json_bytes.decode("utf-8")
            try:
                local_metadata = json.loads(content_str)
            except json.JSONDecodeError as e:
                print(f"Error decoding JSON: {e}")

    return local_metadata


def save_metadata_to_json(_metadata, _output_file):
    with open(_output_file, "w", encoding="utf-8") as f:
        json.dump(_metadata, f, ensure_ascii=False, indent=2)


def extract_metadata_layer(json_data):
    local_metadata_layer = {}

    for key, value in json_data.items():
        if key == "__metadata__":
            local_metadata_layer[key] = value
        elif isinstance(value, dict):
            extracted = extract_metadata_layer(value)
            if extracted:
                local_metadata_layer[key] = extracted

    return local_metadata_layer


def load_json_file(_file_path):
    with open(_file_path, "r", encoding="utf-8") as f:
        return json.load(f)


if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: python module.py <input_file> <output_file>")
        sys.exit(1)

    file_path = sys.argv[1]
    output_file = sys.argv[2]

    # メタ情報の開始マーカー
    start_marker = b'{"__metadata__":'

    # メタ情報の抽出
    metadata = extract_metadata(file_path, start_marker)

    # メタ情報を整形して JSON ファイルに保存
    save_metadata_to_json(metadata, output_file)

    # JSON ファイルを読み込む
    data = load_json_file(output_file)

    # "__metadata__" 階層のみを抽出
    metadata_layer = extract_metadata_layer(data)

    # "__metadata__" 階層のみを含む JSON ファイルに保存
    save_metadata_to_json(metadata_layer, output_file)