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 ") 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)