es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo elimino un bloque de texto de varios archivos json repetitivos donde hay un cambio pequeño entre los archivos?

Tengo un archivo Json que tiene partes repetitivas y estoy intentando escribir un script para eliminar un cierto bloque de texto de múltiples archivos. Un script de Python sería el más preferido, de lo contrario, según mi búsqueda, sed también puede funcionar, aunque no sé nada al respecto.

Aquí hay un ejemplo del formato de mi archivo Json:

  1. ¿Cómo eliminaría lo siguiente del archivo Json?

  2. ¿Cómo adapto el script para tener en cuenta diferentes URL “FindMe” en varios archivos? Por ejemplo, un segundo archivo tendría lo siguiente, y así sucesivamente para varios archivos.

Creo que usar una expresión regular puede ayudar, pero estoy teniendo problemas para entenderlas e implementarlas dentro de un script.

Cualquier ayuda es apreciada, gracias.

Actualización:

Me gustaría que el resultado final se vea así:

Tags:  , ,

Answer

  1. Avatar for davy.ai
    1. En Python, se puede utilizar el módulo json para cargar el archivo JSON en un objeto de Python, luego filtrar el bloque de texto que se desea eliminar y luego escribir el objeto actualizado de nuevo en el archivo JSON. Aquí hay un ejemplo de script:
    import json
    
    # cargar el archivo JSON en un objeto de Python
    with open('input.json') as f:
        data = json.load(f)
    
    # filtrar el bloque de texto que se desea eliminar
    data = [d for d in data if d['Animal']['Type_species'] != 'Mammal']
    
    # escribir el objeto actualizado de nuevo en el archivo JSON
    with open('output.json', 'w') as f:
        json.dump(data, f, indent=2)
    

    El script carga el archivo JSON input.json, filtra el bloque de texto donde el Type_species es "Mammal", y escribe el objeto actualizado en un nuevo archivo output.json con una indentación de 2 espacios.

    1. Para adaptar el script y tener en cuenta diferentes URL de FindMe en múltiples archivos, se puede utilizar un argumento de línea de comando para especificar el nombre del archivo y utilizar un bucle para procesar múltiples archivos. Aquí hay un ejemplo de script actualizado:
    import argparse
    import json
    
    parser = argparse.ArgumentParser(description='Eliminar un bloque de texto de un archivo JSON')
    parser.add_argument('file', nargs='+', help='el o los archivos JSON a procesar')
    args = parser.parse_args()
    
    for file_name in args.file:
        # cargar el archivo JSON en un objeto de Python
        with open(file_name) as f:
            data = json.load(f)
    
        # filtrar el bloque de texto que se desea eliminar basado en la URL "FindMe"
        data = [d for d in data if not d['FindMe'].endswith('/facts/arctic-fox')]
    
        # escribir el objeto actualizado de nuevo en el archivo JSON
        with open(file_name, 'w') as f:
            json.dump(data, f, indent=2)
    

    El script utiliza el módulo argparse para analizar los argumentos de línea de comandos. Puede ejecutar el script con uno o más nombres de archivos como argumentos, así:

    python script.py file1.json file2.json file3.json
    

    El script utiliza un bucle para procesar cada archivo, carga el archivo JSON en un objeto de Python, filtra el bloque de texto basado en la URL FindMe que termina con /facts/arctic-fox, y escribe el objeto actualizado nuevamente en el mismo archivo.

Comments are closed.