Skip to content

Commit 079dd1b

Browse files
committed
mouredev#12 - Python
1 parent e3daec0 commit 079dd1b

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
import os
2+
import xml.etree.ElementTree as xml # 📦 Módulo para trabajar con XML
3+
import json
4+
"""
5+
JSON Y XML
6+
"""
7+
8+
#JSON: Formato ligero de texto para almacenar datos usando llaves {} y corchetes [].
9+
#XML: Formato de texto para almacenar datos usando etiquetas <etiqueta> </etiqueta>.
10+
11+
#ALT + SHIFT + F
12+
13+
# Diccionario de datos con diferentes tipos de valores
14+
data = {
15+
"name": "Complex_303",
16+
"age": 24,
17+
"birth_date": "01-01-2001",
18+
"programming_languages": ["Python", "SQL", "C#"]
19+
}
20+
21+
22+
#XML
23+
# Nombre del archivo XML que se va a crear
24+
xml_file = "Complex_303.xml"
25+
26+
# 📌 Definir función para guardar los datos en formato XML
27+
def create_xml():
28+
29+
# Crear elemento raíz del XML llamado <data>
30+
root = xml.Element("data")
31+
32+
# Recorrer el diccionario data clave-valor
33+
for key, value in data.items():
34+
# Crear un subelemento para cada clave (ej. <name>, <age>, etc.)
35+
child = xml.SubElement(root, key)
36+
37+
# Si el valor es una lista (ej. lista de lenguajes de programación)
38+
if isinstance(value, list):
39+
# Por cada elemento en la lista, crear un subelemento <item> y asignarle su valor
40+
for item in value:
41+
xml.SubElement(child, "item").text = item
42+
else:
43+
# Si no es lista, se asigna directamente el valor como texto
44+
child.text = str(value)
45+
46+
# Crear árbol XML a partir del elemento raíz
47+
tree = xml.ElementTree(root)
48+
49+
# Escribir el árbol en un archivo XML
50+
tree.write(xml_file)
51+
52+
# 📌 Llamar a la función para generar el archivo
53+
create_xml()
54+
55+
#Abril el archivo y leerlo
56+
with open(xml_file, "r") as xml_data:
57+
print(xml_data.read())
58+
59+
#os.remove(xml_file) #borrarlo
60+
61+
62+
#JSON
63+
json_file = "Complex_303.json"
64+
65+
66+
def create_json():
67+
68+
# 📌 Abrimos (o creamos) el archivo en modo escritura ("w")
69+
# con el nombre json_file, y lo llamamos json_data dentro del bloque
70+
with open(json_file, "w") as json_data:
71+
# Convertimos un diccionario (o cualquier estructura válida) a JSON
72+
# y lo escribimos en el archivo abierto
73+
json.dump(data, json_data)
74+
75+
create_json()
76+
77+
# Ahora abrimos el mismo archivo pero en modo lectura ("r")
78+
with open(json_file, "r") as json_data:
79+
# Leemos todo el contenido del archivo JSON y lo mostramos por pantalla
80+
print(json_data.read())
81+
82+
# Finalmente eliminamos el archivo JSON que creamos
83+
#os.remove(json_file)
84+
85+
86+
""" DIFICULTAD EXTRA (opcional):
87+
* Utilizando la lógica de creación de los archivos anteriores, crea un
88+
* programa capaz de leer y transformar en una misma clase custom de tu
89+
* lenguaje los datos almacenados en el XML y el JSON.
90+
* Borra los archivos."""
91+
92+
93+
# Definimos una clase llamada Data para almacenar información estructurada
94+
class Data:
95+
# Método constructor que se ejecuta al crear una instancia de Data
96+
def __init__(self, name, age, birth_date, programming_languages):
97+
# Guardamos los valores recibidos en atributos de la clase
98+
self.name = name
99+
self.age = age
100+
self.birth_date = birth_date
101+
self.programming_language = programming_languages
102+
103+
104+
# Abrimos el archivo XML en modo lectura
105+
with open("Complex_303.xml", "r") as xml_data:
106+
# Leemos y convertimos el contenido XML en una estructura de árbol
107+
root = xml.fromstring(xml_data.read())
108+
109+
# Buscamos y extraemos el texto de cada etiqueta usando find()
110+
name = root.find("name").text
111+
age = root.find("age").text
112+
birth_date = root.find("birth_date").text
113+
114+
# Creamos una lista vacía para almacenar los lenguajes de programación
115+
programming_languages = []
116+
# Iteramos sobre los elementos <item> dentro de <programming_languages>
117+
for item in root.find("programming_languages"):
118+
programming_languages.append(item.text)
119+
120+
# Creamos una instancia de la clase Data usando los valores extraídos del XML
121+
xml_class = Data(name, age, birth_date, programming_languages)
122+
# Imprimimos los atributos de esa instancia en forma de diccionario
123+
print(xml_class.__dict__)
124+
125+
126+
# Abrimos el archivo JSON en modo lectura
127+
with open("Complex_303.json", "r") as json_data:
128+
# Cargamos el contenido JSON y lo convertimos en diccionario de Python
129+
json_dict = json.load(json_data)
130+
131+
#Creamos una instancia de la clase Data usando los valores extraídos del JSON
132+
json_class = Data(
133+
json_dict["name"],
134+
json_dict["age"],
135+
json_dict["birth_date"],
136+
json_dict["programming_languages"]
137+
)
138+
139+
#Imprimimos los atributos de esa instancia en forma de diccionario
140+
print(json_class.__dict__)
141+
142+
143+
# Eliminamos los archivos XML y JSON que habíamos usado
144+
os.remove("Complex_303.xml")
145+
os.remove("Complex_303.json")
146+
147+
148+
149+
150+
151+
# fromstring() Convierte texto XML en árbol DOM
152+
# find() Busca una etiqueta XML específica
153+
# for item in ... Itera sobre subetiquetas <item> dentro de una lista XML
154+
# json.load() Carga un JSON desde archivo a diccionario
155+
# __dict__ Devuelve los atributos de una instancia como diccionario
156+
# os.remove() Borra archivos físicos del sistema

0 commit comments

Comments
 (0)