75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
|
import xmltodict
|
||
|
import pandas as pd
|
||
|
|
||
|
def save_json_to_xml(json_data, filename="DB_Structure.xml"):
|
||
|
"""
|
||
|
Convert JSON data to XML and save it to a file.
|
||
|
"""
|
||
|
xml_data = xmltodict.unparse({"root": json_data}, pretty=True)
|
||
|
with open(filename, "w") as xml_file:
|
||
|
xml_file.write(xml_data)
|
||
|
print(f"XML data saved to {filename}")
|
||
|
|
||
|
|
||
|
def save_dataframe_to_excel(df, filename="DB_Structure.xlsx"):
|
||
|
"""
|
||
|
Save the provided DataFrame to an Excel file.
|
||
|
"""
|
||
|
df.to_excel(filename, index=False)
|
||
|
print(f"Data saved to {filename}")
|
||
|
|
||
|
|
||
|
def save_dataframe_to_file(df, filename="DB_Structure.csv"):
|
||
|
"""
|
||
|
Save the provided DataFrame to a CSV file.
|
||
|
"""
|
||
|
df.to_csv(filename, index=False)
|
||
|
print(f"Data saved to {filename}")
|
||
|
|
||
|
|
||
|
def collect_data_for_table(db_struct, parent_prefix="", collected_data=[]):
|
||
|
"""
|
||
|
Recursively collect data from the DB structure to display in a tabular format,
|
||
|
omitting 'fields' and 'Struct' in the names.
|
||
|
"""
|
||
|
if isinstance(db_struct, dict):
|
||
|
for key, value in db_struct.items():
|
||
|
# Skip 'fields' and 'Struct' keys in the name path
|
||
|
if key == 'fields' or key == 'Struct':
|
||
|
next_prefix = parent_prefix # Continue with the current prefix
|
||
|
else:
|
||
|
next_prefix = f"{parent_prefix}.{key}" if parent_prefix else key
|
||
|
|
||
|
if isinstance(value, dict) and 'type' in value: # Directly a field with 'type'
|
||
|
field_data = {
|
||
|
"Nombre": next_prefix,
|
||
|
"Tipo": value.get('type', 'N/A'),
|
||
|
"Offset": value.get('offset', 'N/A'),
|
||
|
"Comentario": value.get('comment', 'N/A')
|
||
|
}
|
||
|
collected_data.append(field_data)
|
||
|
|
||
|
# Recursively handle nested dictionaries and lists
|
||
|
if isinstance(value, dict) or isinstance(value, list):
|
||
|
collect_data_for_table(value, next_prefix, collected_data)
|
||
|
elif isinstance(db_struct, list):
|
||
|
for index, item in enumerate(db_struct):
|
||
|
item_prefix = f"{parent_prefix}[{index}]" if parent_prefix else f"[{index}]"
|
||
|
collect_data_for_table(item, item_prefix, collected_data)
|
||
|
|
||
|
return collected_data
|
||
|
|
||
|
|
||
|
def display_as_table(dbs):
|
||
|
"""
|
||
|
Convert collected DB data into a pandas DataFrame and display it.
|
||
|
"""
|
||
|
all_data = []
|
||
|
for db_name, db_content in dbs.items():
|
||
|
print(f"Processing DB: {db_name}")
|
||
|
db_data = collect_data_for_table(db_content)
|
||
|
all_data.extend(db_data)
|
||
|
|
||
|
df = pd.DataFrame(all_data)
|
||
|
return df
|