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 busca a través de un archivo de texto utilizando una columna de Dataframe.

Tengo un archivo de texto muy grande (más de 11 millones de registros) con delimitadores de “;” y tres columnas. Tengo un dataframe de Pandas (una sola columna) con los valores que necesito buscar en el archivo de texto.

El problema es que no puedo cargar el archivo de texto grande en memoria.

Tengo varios bucles for anidados y eso está tomando mucho tiempo. Buscando cada valor de columna dentro de cada línea del archivo de texto. Esto es lo que tengo:

import os
import pandas as pd

os.chdir('D:\AllFiles\Projects')
mainPath = os.getcwd()

inputFile = 'A.txt'
inputPath = os.path.join(mainPath, inputFile)
input_data = open(inputPath, 'r')

outputFile = 'A_output.csv'
outputPath = os.path.join(mainPath, outputFile)
output_data = open(outputPath,'w')

# Nombre y ubicación del archivo de entrada
actFile = 'SingleColList.txt'
actPath = os.path.join(mainPath, actFile)

# Lee los datos limpios en un dataframe
act_df = pd.read_csv(actPath,header=0)

with input_data as f:
    for num, line in enumerate(f, 1):
        for index, row in act_df.iterrows():
            if row['col1'] in line:
                output_data.write( line )

input_data.close()
output_data.close()

print('¡Hecho!')

¿Hay algo más rápido que pueda usar?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, existen métodos más eficientes que se pueden utilizar para buscar dentro de un archivo de texto grande sin cargarlo en memoria. Una opción podría ser utilizar la librería Python csv con el parámetro delimiter establecido en “;” para leer el archivo de texto fila por fila y solo cargar una fila a la vez en memoria. Esto se puede hacer utilizando un bucle while y verificando si la fila contiene alguno de los valores en el dataframe de Pandas. Otra opción sería utilizar la herramienta de línea de comando grep para buscar en el archivo de texto en lugar de utilizar bucles de Python. Esto se puede hacer ejecutando el comando grep con los valores del dataframe de Pandas como patrón de búsqueda y el archivo de texto grande como archivo de entrada. Dependiendo de su caso de uso, uno de estos métodos puede ser más rápido y eficiente que utilizar bucles anidados de Python.

Comments are closed.