Skip to content

Commit a2c5b60

Browse files
committed
12-Python
1 parent 58331f6 commit a2c5b60

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
#import os
2+
import xml.etree.ElementTree as xml
3+
import json
4+
5+
xml_file = "Irenetitor.xml"
6+
json_file = "Irenetitor.json"
7+
8+
user = {
9+
"name": "Ana",
10+
"age": 25,
11+
"birth_date": "23-02-2000",
12+
"languages": ["Python", "JavaScript", "Java"]
13+
}
14+
15+
#XML
16+
17+
def save_xml():
18+
19+
root = xml.Element("user")
20+
21+
for key, value in user.items():
22+
child = xml.SubElement(root, key)
23+
if isinstance(value, list):
24+
for language in value:
25+
xml.SubElement(child, "language").text = language
26+
else:
27+
child.text = str(value)
28+
29+
# ✔ Write the file inside the function
30+
tree = xml.ElementTree(root)
31+
tree.write(xml_file)
32+
33+
34+
save_xml()
35+
36+
with open(xml_file) as xml_user:
37+
print(xml_user.read())
38+
39+
#os.remove(xml_file)
40+
41+
42+
'''
43+
<data>
44+
<name>Ana</name>
45+
<age>25</age>
46+
<birth_date>23-02-2000</birth_date>
47+
<languages>
48+
<language>Python</language>
49+
<language>JavaScript</language>
50+
<language>Java</language>
51+
</languages>
52+
</data>
53+
54+
'''
55+
56+
#JSON
57+
58+
with open(json_file, "w") as json_user:
59+
json.dump(user, json_user)
60+
61+
with open(json_file, "r") as json_user:
62+
print(json_user.read())
63+
64+
#os.remove(json_file)
65+
66+
'''
67+
{
68+
"name": "Ana",
69+
"age": 25,
70+
"birth_date": "23-02-2000",
71+
"languages": ["Python", "JavaScript", "Java"]
72+
}
73+
'''
74+
75+
#EXTRA EXERCISE
76+
77+
xml_file = "user_parsed.xml"
78+
json_file = "user_parsed.json"
79+
80+
user_data = {
81+
"name": "Juan",
82+
"age": 29,
83+
"birth_date": "23-02-1996",
84+
"languages": ["Python", "JavaScript", "Java"]
85+
}
86+
87+
# Save data as XML
88+
89+
def save_xml(data: dict, filename: str) -> None:
90+
root = xml.Element("user") # <user> ... </user>
91+
92+
for key, value in data.items():
93+
child = xml.SubElement(root, key)
94+
95+
if isinstance(value, list):
96+
# For lists -> create "<language>" for each item
97+
for language in value:
98+
xml.SubElement(child, "language").text = language
99+
else:
100+
# Simple values -> just put text
101+
child.text = str(value)
102+
103+
tree = xml.ElementTree(root)
104+
tree.write(filename, encoding="utf-8", xml_declaration=True)
105+
106+
# Save data as JSON
107+
108+
def save_json(data: dict, filename: str) -> None:
109+
with open(filename, "w", encoding="utf-8") as json_user:
110+
json.dump(data, json_user, indent=4)
111+
112+
113+
# USER CLASS
114+
115+
class User:
116+
def __init__(self, name, age, birth_date, languages):
117+
self.name = name
118+
self.age = age
119+
self.birth_date = birth_date
120+
self.languages = languages
121+
122+
def __repr__(self):
123+
return (
124+
f"User(name={self.name!r}, age={self.age}, "
125+
f"birth_date={self.birth_date!r}, languages={self.languages!r})"
126+
)
127+
128+
@classmethod
129+
def from_json(cls, filename: str):
130+
"""Create a User object from a JSON file."""
131+
with open(filename, "r", encoding="utf-8") as f:
132+
data = json.load(f)
133+
134+
return cls(
135+
name=data["name"],
136+
age=data["age"],
137+
birth_date=data["birth_date"],
138+
languages=data["languages"],
139+
)
140+
141+
@classmethod
142+
def from_xml(cls, filename: str):
143+
"""Create a User object from an XML file."""
144+
tree = xml.parse(filename)
145+
root = tree.getroot()
146+
147+
# Simple elements
148+
name = root.find("name").text
149+
age = int(root.find("age").text)
150+
birth_date = root.find("birth_date").text
151+
152+
# Languages (list)
153+
languages = []
154+
langs_node = root.find("languages")
155+
if langs_node is not None:
156+
for lang_tag in langs_node.findall("language"):
157+
languages.append(lang_tag.text)
158+
159+
return cls(name, age, birth_date, languages)
160+
161+
162+
# RUN THE FULL FLOW
163+
164+
save_xml(user_data, xml_file)
165+
save_json(user_data, json_file)
166+
167+
print("\n--- XML FILE CONTENT ---")
168+
with open(xml_file, "r", encoding="utf-8") as xml_user:
169+
print(xml_user.read())
170+
171+
print("\n--- JSON FILE CONTENT ---")
172+
with open(json_file, "r", encoding="utf-8") as json_user:
173+
print(json_user.read())
174+
175+
# Create User objects
176+
user_from_xml = User.from_xml(xml_file)
177+
user_from_json = User.from_json(json_file)
178+
179+
print("\n--- USER OBJECTS ---")
180+
print("From XML: ", user_from_xml)
181+
print("From JSON:", user_from_json)
182+
183+
# Optional delete:
184+
# os.remove(xml_file)
185+
# os.remove(json_file)

0 commit comments

Comments
 (0)