fork download
  1. # Archivos en Python
  2.  
  3.  
  4. import csv
  5. import json
  6. import pandas as pd
  7. import matplotlib.pyplot as plt
  8.  
  9.  
  10. class Pokemon:
  11. # Type hints: herramientas como mypy
  12. # (11, "metapod", 0.7, 9.9, "bicho") # pokemon putativo
  13. def __init__(self,
  14. nid: int = 11,
  15. nombre: str = "metapod",
  16. altura: float = 0.7,
  17. peso: float = 9.9,
  18. tipo: str = "bicho"):
  19. self._nid = nid
  20. self._nombre = nombre
  21. self._altura = altura
  22. self._peso = peso
  23. self._tipo = tipo
  24.  
  25.  
  26. def to_list(self):
  27. return [
  28. self._nid,
  29. self._nombre,
  30. self._altura,
  31. self._peso,
  32. self._tipo]
  33.  
  34. def __str__(self):
  35. return f"{self._nid}/{self._nombre}: {self._altura} m. {self._peso} kg." \
  36. + f" -- {self._tipo}"
  37.  
  38.  
  39. def crea_pokemons():
  40. return [
  41. Pokemon(1, "bulbosaur", 0.7, 6.9, "planta"),
  42. Pokemon(25, "pikachu", 0.4, 6.0, "eléctrico"),
  43. Pokemon(26, "raichu", 0.8, 30.0, "eléctrico"),
  44. Pokemon(257, "blaziken", 1.9, 52.0, "fuego"),
  45. ]
  46.  
  47.  
  48. def guarda_pokemons_txt(pokemons: list[Pokemon]):
  49. with open("pokemons.txt", "wt", encoding="utf-8") as f:
  50. for p in pokemons:
  51. print(str(p), file=f)
  52. #f.write(str(p) + "\n")
  53.  
  54.  
  55. def recupera_archivo_pokemons_txt(nf: str):
  56. with open(nf, "rt") as f:
  57. for linea in f:
  58. print(linea.strip())
  59.  
  60.  
  61. def guarda_pokemons_csv(pokemons: list[Pokemon]):
  62. with open("pokemons.csv", "wt", encoding="utf-8") as f:
  63. print("nid,nombre,altura,peso,tipo", file=f)
  64. w = csv.writer(f)
  65. for p in pokemons:
  66. w.writerow(p.to_list())
  67.  
  68.  
  69. def guarda_pokemons_json(pokemons: list[Pokemon]):
  70. pokemon_dicts = [p.__dict__ for p in pokemons]
  71. with open("pokemons.json", "wt", encoding="utf-8") as f:
  72. json.dump(pokemon_dicts, f)
  73.  
  74.  
  75. def recupera_archivo_pokemons_json(nf: str) -> list[Pokemon]:
  76. toret: list[Pokemon] = []
  77.  
  78. with open(nf, "rt") as f:
  79. pokemon_dicts = json.load(f)
  80.  
  81. for pd in pokemon_dicts:
  82. p = Pokemon()
  83. p.__dict__ = pd
  84. toret.append(p)
  85.  
  86. return toret
  87.  
  88.  
  89. def recupera_archivo_pokemons_csv(nf: str) -> list[Pokemon]:
  90. toret: list[Pokemon] = []
  91.  
  92. with open(nf, "rt") as f:
  93. r = csv.DictReader(f)
  94. for linea in r:
  95. toret.append(
  96. Pokemon(
  97. int(linea["nid"]),
  98. linea["nombre"],
  99. float(linea["altura"]),
  100. float(linea["peso"]),
  101. linea["tipo"]))
  102.  
  103. return toret
  104.  
  105.  
  106. def crea_archivo_pokemons_txt():
  107. pokemons = crea_pokemons()
  108. guarda_pokemons_txt(pokemons)
  109.  
  110.  
  111. def lee_archivo_pokemons_txt():
  112. recupera_archivo_pokemons_txt("pokemons.txt")
  113.  
  114.  
  115. def crea_archivo_pokemons_csv():
  116. pokemons = crea_pokemons()
  117. guarda_pokemons_csv(pokemons)
  118.  
  119.  
  120. def lee_archivo_pokemons_csv():
  121. pokemons = recupera_archivo_pokemons_csv("pokemons.csv")
  122. for p in pokemons:
  123. print(p)
  124.  
  125.  
  126. def lee_archivo_pokemons_json():
  127. pokemons = recupera_archivo_pokemons_json("pokemons.json")
  128. for p in pokemons:
  129. print(p)
  130.  
  131.  
  132. def crea_archivo_pokemons_json():
  133. pokemons = crea_pokemons()
  134. guarda_pokemons_json(pokemons)
  135.  
  136.  
  137. def lee_archivo_pokemons_csv_pandas():
  138. dfp: pd.DataFrame = pd.read_csv("pokemons.csv")
  139. print("Todos los pokemons\n", dfp)
  140.  
  141. df_nombre_peso = dfp[["nombre", "peso"]]
  142. print("Todos los pokemons (nombre y peso)\n", df_nombre_peso)
  143.  
  144. print("Todos los pokemons (nombre)\n", dfp[["nombre"]])
  145. dfp.altura.hist()
  146. plt.xlabel("Alturas")
  147. plt.ylabel("Cuántos")
  148. plt.show()
  149.  
  150.  
  151. def main():
  152. # crea_archivo_pokemons_txt()
  153. # lee_archivo_pokemons_txt()
  154. # crea_archivo_pokemons_csv()
  155. # lee_archivo_pokemons_csv()
  156. # crea_archivo_pokemons_json()
  157. # lee_archivo_pokemons_json()
  158. lee_archivo_pokemons_csv_pandas()
  159.  
  160.  
  161. if __name__ == "__main__":
  162. main()
  163.  
Runtime error #stdin #stdout #stderr 7.47s 104528KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Fontconfig error: No writable cache directories
Traceback (most recent call last):
  File "./prog.py", line 162, in <module>
  File "./prog.py", line 158, in main
  File "./prog.py", line 138, in lee_archivo_pokemons_csv_pandas
  File "/usr/local/lib/python3.12/dist-packages/pandas/io/parsers/readers.py", line 1026, in read_csv
    return _read(filepath_or_buffer, kwds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/pandas/io/parsers/readers.py", line 620, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/pandas/io/parsers/readers.py", line 1620, in __init__
    self._engine = self._make_engine(f, self.engine)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/pandas/io/parsers/readers.py", line 1880, in _make_engine
    self.handles = get_handle(
                   ^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/pandas/io/common.py", line 873, in get_handle
    handle = open(
             ^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'pokemons.csv'