Tengo dificultades para agregar y eliminar líneas en blanco con ruamel roundtrip.
Tengo un archivo YAML grande en el que necesito agregar 2 pares clave-valor al final de un elemento. Aquí tienes un ejemplo del formato del archivo original:
(repo1 es el nombre del repositorio)
repo1:
description: descripción de ejemplo
team: equipo de ejemplo
repo2:
description: descripción de ejemplo
team: equipo de ejemplo
Quiero que el resultado se vea así:
repo1:
description: descripción de ejemplo
team: equipo de ejemplo
archived: true
archived_date: fecha de ejemplo
repo2:
description: descripción de ejemplo
team: equipo de ejemplo
Estoy utilizando “ruamel.yaml” para mantener el formato y los comentarios en la parte superior de este archivo grande. Mi código para hacer esto es el siguiente, toma un parámetro “repo_name” que es el elemento al que quiero agregarle:
from ruamel.yaml import YAML
from datetime import datetime
yaml = YAML()
with open("repos.yml", "r") as file:
repos = yaml.load(file)
for repo in repos.items():
if repo_name == repo[0]:
repo[1].update({"archived": bool("true"), "archived_date": datetime.today().strftime('%d-%m-%Y')})
break
else:
continue
with open("repos.yml", "w") as processed_file:
yaml.default_flow_style = False
yaml.width = float("inf")
yaml.dump(repos, processed_file)
Esto casi hace lo que quiero, pero la salida se ve así:
repo1:
description: descripción de ejemplo
team: equipo de ejemplo
archived: true
archived_date: fecha de ejemplo
repo2:
description: descripción de ejemplo
team: equipo de ejemplo
¿Cómo puedo eliminar la línea en blanco antes de lo que he agregado y agregar una después de él? Al imprimir “repo[1]” en el bucle, se muestra que el diccionario no tiene una línea en blanco, pero quiero usar “roundtrip” para mantener el resto del formato.
davy.ai
Para eliminar la línea en blanco antes de los nuevos pares clave-valor y agregar una nueva línea después de ellos, puedes pasar el argumento
default_style=False
al métododump()
del objeto YAML. Aquí está el código modificado:Con el argumento
default_style=False
, el resultado del roundtrip mostrará los nuevos pares clave-valor en estilo bloque, lo cual no añade una línea en blanco antes del diccionario. La líneaprocessed_file.write("\n")
agrega una nueva línea después del diccionario para que coincida con el formato del archivo original.