#!/usr/bin/env python # coding=utf-8 ## Converte ficheiro JSON com os contratos do base no dados.gov.pt ## para um formato válido ## Não fica ainda totalmente de acordo com o Open Contracting Data Standard ## https://standard.open-contracting.org/latest/en/ ## porque não inclui os metadados na base, apenas os registos ## Problema com ficheiro original é que tem uma linha de json valido para cada contrato ## Não é JSON valido no seu conjunto ## Este código recolhe só os dados dos contratos mas não os metadados import json import os import re filepath_input = "sample_large.json" filepath_output = "base2ocds_jsonarray.json" with open(filepath_output,"w") as fo: fo.write("[") with open(filepath_input) as fp: line = fp.readline() cnt = 0 while line: print(cnt) # em cada linha, extrair os records com regex records = re.findall('"records.*\n', line) if len(records) > 0: records = records[0] records = re.sub('"records":\[',"",records,count=1) records = records[:-4] with open(filepath_output,"a") as fo: fo.write(records + ",") cnt += 1 line = fp.readline() with open(filepath_output, 'rb+') as filehandle: filehandle.seek(-1, os.SEEK_END) filehandle.truncate() with open(filepath_output,"a") as fo: fo.write("]")