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.

Python, combinando datos como una parte coincidente de dos archivos usando un diccionario.

Input1:

Aa  Ab,Ac,Información1
Ba  Bb,Bc,Información2
Ca  Cb,Cc,Información3

Input2:

ID 
A1
A2 información3
A3 asdfasdf
A3 vlkmgoie
//
ID
A1
A2 información2
A3 opjnbiube
A3 plwikjnd
//

Expected output:

>Aa,Ab,Ac,Información1

>Ba,Bb,Bc,Información2
A3 opjnbiube
A3 plwikjnd
>Ca,Cb,Cc,Información3
A3 asdfasdf
A3 vlkmgoie

Code:

diccionario = {}
with open(input_file1, 'r') as entrada1:
    for linea in entrada1:
        linea_reemplazada = '>' + linea.replace('\t', ',').strip()
        identificador = linea_reemplazada.strip().split(',')[-1]
        diccionario[identificador] = identificador


with open(input_file2, 'r') as entrada2:
    for bloque in entrada2.read().split('//'): 

        for k in diccionario.keys():
            llaves_desde_id = k

            if llaves_desde_id in bloque:

Primero, extraje solo la información al final de input_file1. Luego, se crearon bloques (unidades) basados en ‘//’ en input_file2. En esta situación, si los bloques de input_file2 contienen información extraída de input_file1, quiero escribir el contenido de una parte del bloque debajo de cada línea de input_file1 como se muestra en ‘Expected output’. Entonces, mi pregunta es cómo puedo guardar la información extraída de input_file1 como un diccionario mediante la coincidencia de los contenidos del bloque de input_file2.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para guardar la información extraída del archivo de entrada input_file1 como un diccionario mediante la coincidencia de los contenidos de bloques del archivo de entrada input_file2, puedes crear un diccionario anidado donde las claves del diccionario externo son los identificadores del archivo input_file1 y los valores son diccionarios internos. Los diccionarios internos pueden tener claves para la información del archivo input_file1 (por ejemplo, Aa, Ab, Ac, Information1) y valores de una lista vacía para almacenar los contenidos del archivo input_file2 que coinciden con esa información.

    Aquí tienes un ejemplo de fragmento de código:

    outer_dict = {}
    with open(input_file1, 'r') as file1:
        for line in file1:
            id, info = line.strip().split(None, 1) # separar el identificador y la información
            inner_dict = {info: []} # crear un diccionario interno con una lista vacía
            outer_dict[id] = inner_dict # añadir el diccionario interno al diccionario externo
    
    with open(input_file2, 'r') as file2:
        current_id = None
        for line in file2:
            if line.startswith('ID'): # comprobar una nueva sección de identificador
                current_id = line.strip().split()[1]
            else:
                info, content = line.strip().split(None, 1) # separar la información y el contenido
                if current_id in outer_dict and info in outer_dict[current_id]: # comprobar si la información coincide
                    outer_dict[current_id][info].append(content) # añadir el contenido a la lista interna
    

    Con este código, deberías obtener un outer_dict que tiene la siguiente estructura:

    {
        'Aa': {
            'Ab,Ac,Información1': [...]
        },
        'Ba': {
            'Bb,Bc,Información2': [...]
        },
        'Ca': {
            'Cb,Cc,Información3': [...]
        }
    }
    

    Los ... representan la lista de contenidos del archivo input_file2 que coinciden con la información del archivo input_file1. Luego puedes utilizar este diccionario para generar la salida deseada.

Comments are closed.