¿Cómo leer una cantidad de datos o líneas específicas en Python? – python python-2.7 archivo

Pregunta:


Tengo un archivo .lis , .txt o .csv y necesito tomar de éste solo una cantidad de datos o líneas y omitir los demás datos, que solo me tome los datos que están entre esas líneas o palabras deseadas; o mejor dicho ¿cómo identifico la palabra o línea y que a partir de esta me muestre las lineas o los datos hasta otra palabra o linea donde va terminar?

Hasta la momento solo he podido leer el archivo con este código:

abrir = open('clase1.lis','r')
while True:
      linea = abrir.readline()
      if not linea: break
      print linea 

Otra forma que había intentado era:

abrir = open('clase1.lis','r')
for q in abrir:
    print q

y otras más que lo que hacen es mostrarme todo el archivo o imprimirme todos los datos en pantalla. Pero como lo dije anteriormente solo necesito un bloque de ese archivo. El archivo es muy grande.

Preguntado por: Yeison Ordoñez

Si el archivo es grande te conviene leerlo línea por línea en vez de cargar todo el archivo en memoria. Por ejemplo con el siguiente archivo.txt:

--------------------------
Hola me llamo Cesar
Soy de Lima
Me gusta Python
--------------------------
Hola me llamo Juan
Yo no soy de Lima
Odio Python
--------------------------
Hola me llamo Jose
Vivo cerca a Lima
Nunca he usado Python
--------------------------

Y buscando la palabre clave Lima, puedes obtener todas las líneas donde se cumpla esa condición:

palabra = 'Lima'
ocurrencias = []
with open('archivo.txt') as lineas:
    for linea in lineas:
        if palabra in linea:
            ocurrencias.append(linea)
print ocurrencias

O algo mas compacto usando filter:

palabra = 'Lima'
ocurrencias = filter(lambda line: palabra in line, open('archivo.txt').readlines())
print ocurrencias

Para ambos casos el resultado será una lista con las líneas encontradas:

['Soy de Liman', 'Yo no soy de Liman', 'Vivo cerca a Liman']

Suponiendo tener en tu archivo .csv con contenido:

Irlanda,33°02'N,128°12'W
Rumania,33°03'N,128°25'W
Colombia,12°43'46?N,54°02'11?W
Los Angeles,34°03'N,118°15'W
Panama,40°42'46?N,74°00'21?W
Paris,48°51'24?N,2°21'03?E
Munchen,42°53'24?N,22°21'33?E
Mexico,30°42'36?N,44°00'21?W
Paris,48°51'24?N,2°21'03?E
Colombia,32°42'36?N,34°04'21?W

Puedes crear una funcion para extraer los registros con el contenido que deseas

lista = [];

def buscaPalabra(str, file):       
    for line in file:        
        for part in line.split():            
            if str in part:                
                lista.append(line);
    return lista

Por ejemplo al buscar «Colombia»

file = open('C:Datadatos.csv','r')
print buscaPalabra("Colombia", file)

obtendrías las coincidencias de «Colombia»:

['Colombia,12°43'46?N,54°02'11?W n', 'Colombia,32°42'36?N,34°04'21?W n']

Vamos a probar un pequeño truco: todo objeto file se comporta como un iterador, con el que puedes recorrer el fichero línea a línea. Para obtener el texto entre dos líneas (n,m) puedes usar las utilidades para iteradores del módulo itertools:

import itertools

with open("datos.txt") as data:
    texto = itertools.islice(data, n, m)

    for linea in texto:
        ....

Si lo que buscas son ocurrencias de palabra en algunas líneas:

import itertools

with open("datos.txt") as data:
    ocurrencias = (linea for linea in data if palabra in linea)

    for linea in ocurrencias:
        ....

Incluso combinar ambas:

import itertools

with open("datos.txt") as data:
    texto = itertools.islice(data, n, m)
    ocurrencias = (linea for linea in texto if palabra in linea)

    for linea in ocurrencias:
        ....

Si lo que quieres es buscar información dentro del texto, quizás sería interesante usar un parser. Prueba a mirar pyparsing, que es sencillo y potente.

Consulta, el resultado que obtengo al buscar en un txt es lo siguiente:

['Usuario: carlos.lopezrn', 'gital<br><br>Usuario: carlos.carus<br><br>BP: 1378704 <br><br>CUIL: 2025201=rn'] 

lo que necesitaria es que en este caso quede en una variable carlos.lopez en otra variable 1378704 y en otra el cuil, me podran ayudar con esto?

el codigo es el siguiente:

    lista = [];
    file = open('archivo.txt','r')

def buscaPalabra(str, file):       
    for line in file:        
       for part in line.split():            
            if str in part:                
                lista.append(line);
    return lista
print buscaPalabra("Usuario:", file)

Fuente

Related Posts:

Python editor extension for laravel-admin
...
DreamFactory(tm) Scripting Components
...
Enhance PHP sprintf with Python-style named parameters
...
Python string slices in PHP
...
Non-standard PHP library (NSPL) – functional primitives toolbox and more
...
PHP client for Celery task queue
...
File Upload widget for jQuery.
...
Con Django ‘str’ object is not callable en class based-views – python django
Pregunta: Tengo este problema cuando quiero acceder a una URL que me dice que es str object is no callable seguramente tengo algo mal en ...
Abrir páginas web en python 3.5.X en la misma ventana – python python-3.x webbrowser
Pregunta: Buenas, he hecho un script para lanzar varias páginas web en una sola ventana, es decir, cada url en una pestaña sin embargo, firefox ...
Publicar proyecto en Python 3.5 con heroku – python django python-3.x
Pregunta: Hola tengo un proyecto hecho con Python 3.5 y Django 1.10 y quisiera publicarlo en HEROKU pero veo que solo soporta Python 2.7, ¿alguien ...
Correcto uso de la app admin de django – python django
Pregunta: Cual es el correcto uso que se le debe dar a la página de administración (django.contrib.admin) en una aplicación en producción. explico mi pregunta. El ...
Cambiar un valor string a un entero – python django ajax
Pregunta: Con el siguiente código quiero hacer una validación donde valide si un dato que voy a ingresar es mayor a otro que ya tengo, ...
Como correr Django en python 3.5 – python python-3.x django
Pregunta: estoy trabajando con Django en python 2.7, para eso hago uso de virtualenv, pip, el conector de mysql, etc. Tengo predefinido python 3.5 en ...
Insertar salto de línea escribiendo en un txt (Python) – python tkinter
Pregunta: Como puedo insertar un salto de línea : archi.write(svnombreRP.get()) Lo hago de la siguientes maneras y no me funciona: No funciona archi.write(svnombreRP.get()'/n') No funciona archi.write(svnombreRP.get()/n) No funciona, me imprime la variable ...
Python elemento IN lista de strings – python python-3.x
Pregunta: tengo la siguiente lista y string: lis = palabra = 'ejemplo' Pero cuando hago palabra in lis Me retorna False. ¿A qué ...

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *