[Python-es] Busqueda cadenas NO coincidentes

Boris Perez Canedo inf200523 en ucf.edu.cu
Mie Mar 24 21:30:02 CET 2010



Hola amig en s de la lista.

Tengo este
pequeño inconveniente.

Tengo dos archivos (archivo1.txt y
archivo2.xml).  Archivo1 contiene una lista de datos en la siguiente forma:

primerdato
segundodato
tercerdato
.
.
.
etc


Archivo2.txt es un archivo en formato XML que tiene la estructura propia
de un archivo de este tipo, completamente diferente al archivo1.txt

Lo que
necesito que haga mi programa es:
1. Leer linea a linea archivo1.txt
2. Cada
vez que se lea una línea de archivo1.txt busque si esa palabra se encuentra en
archivo2.xml
3. Si la palabra NO se encuentra en archivo2.xml se debe crear un
archivo nuevo (diferencias.txt) que agregue esa palabra que no encontro en
archivo2.xml.  Si el archivo diferencias.tx ya existe entonces que agregue una
linea nueva al archivo diferencias.txt con la palabra en cuestion.

Lo que
tengo:
Tengo un prototipo que inicialmente me funciono con dos archivos de texto
pequeño (en pruebas) y misma estructura, pero al ponerlo en producción
este no me funciona de la forma deseada ya que me copia todos los registros que contiene
el archivo1.txt.

Este es el codigo para aquel/aquella que me pueda
colaborar,  y de una vez MuuuuChassss Gracias

#-*- coding: cp1252 -*-
"""Abro el primer archivo para
leer la cantidad de
líneas
que posee """
f1 =
open("archivo1.txt","r")
a = 0
for i in f1.readlines():
    a += 1
cantidad = a
f1.close()



contador = 0
while contador     #Abro el primer archivo para la
lectura
    f1 = open("archivo1.txt","r")
    for linea in f1:
    #Evito que se muestren los
saltos de línea
    if linea[-1]=='\n': 
            linea =
linea[:-1]
    buscar = linea #Asigno cada línea a la
variable buscar

    #Abro el segundo archivo donde se
buscará la variable
    f2 =
open("archivo2.xml","r")
        archivo2 = f2.read() #Leo Completamente el
archivo
    #Lee la variable y la busca
    if
archivo2.find(buscar)>=0:
        print
buscar+' OK '
    else:
        f3 =
open("diferencias.txt","a")
           
f3.write(buscar+"\n") #Si no encuentra la variable pone Fail
        f3.close()#Cierro el archivo que se crea

    contador += 1

f2.close() #Cierro el archivo donde
se busca
f1.close() #Cierro el archivo que contiene las variables a buscar

print "Fin de la busqueda"

Hola,

Esto te puede dar las lineas sin \n

f =
open("archivo1.txt","r")
lines = []
for line in
f.readlines():
    if line <> '\n':
        lines.append(line.replace('\n',''))
f.close()
print lines        


Como es logico no se lo que guardas en tu archivo1.txt ni tampoco en tu archivo2.xml.
Pero debes cuidarte de que los tags de tu archivo xml no vayan a coincidir con los datos
en tu archivo archivo1.txt, (si es que te interesa que no coincidan) por eso te
sugiero que uses xml.etree.ElementTree para trabajar con el archivo xml.

Saludos.
Boris.




---
La mejor vacuna contra el virus A(H1N1) es la higiene personal
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100324/4dc31be3/attachment.html>


Más información sobre la lista de distribución Python-es