TransWikia.com

¿Existe algo similar a grep pero para obtener el nombre de archivo en python?

Stack Overflow en español Asked on November 20, 2021

requiero buscar un numero de Serie dentro de algunos archivos. Ya encontrado quisiera obtener el nombre del archivo en un string.

Se que puedo buscar el numero de Serie y el comando grep me retorna la línea donde se encuentra el numero de serie pero ¿como puedo hacer esto con un script de python?

One Answer

La función de grep se puede reproducir fácilmente.

Para buscar dentro de un archivo, basta con leerlo linea por linea buscando el texto en cuestión. Puedes usar find() para buscar textos fijos o expresiones regulares, para buscar un rango mayor de textos.

La función buscar_dentro busca dentro de archivo y retorna el número de línea donde se encontró el texto, o el valor cero, si el texto no se encuentra:

def buscar_dentro(nombre, texto):

    nro_linea = 0     
    with open(nombre) as archivo:
        for linea in archivo.readlines():
             nro_linea += 1
             if linea.find(texto) > - 1:
                break
        else:
            nro_linea = 0

    return nro_linea

Esta función busca en un solo archivo, pero si pensamos en grep, pensamos en buscar dentro de una lista de archivos.

En lugar de modificar la función básica, es mejor crear una segunda función más avanzada. Esta recibe una especificación ambigua (como "*.txt") y busca dentro de esos archivos:

import glob

def buscar_muchos(pattern, texto):
    for archivo in glob.glob(pattern):
        linea = buscar_dentro(archivo, texto)
        if linea:
            yield archivo, linea

Esta función es un generador, o sea, se usa como un iterador:

for resultado in buscar_muchos("*.txt", "while"):
    print(resultado)

que produce:

candid@dell ~ $ python3 grep.py
('grep.txt', 24)
('test3.txt', 7)
('lambda.txt', 27)
('sort.txt', 11)
('consola.txt', 11)
('chess.txt', 11)

La función glob recibe una especificaciòn ambigua y retorna la lista de archivos que la satisfacen. Tiene opciones para hacer búsqueda recursiva.

Answered by Candid Moe on November 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP