¿Cómo puedo comprobar si existe una línea en un archivo y escribir en la línea al archivo si no existe el uso de Python

este es mi intento actual

 
logfile = open('ip.registro', 'a+') 

mientras que 1: 
linea = archivo de registro.readline() 
#line.replace("\n", "") 
línea de impresión 

si la línea == str(self.CLIENT_HOST): 
de impresión "en la Línea de Encontrar Saltar" 
otra cosa: 
el archivo de registro.write(str(self.CLIENT_HOST)+"\n") 
si no línea: 
print "EF" Alcanzó" 
romper 
línea de impresión 
el archivo de registro.close() 

saludos

Como una nota, usted está mejor servido mediante funciones integradas como readlines() y el uso de la.. de la sintaxis. Mientras que (1) es mucho más propenso a errores.
Usted no debe usar mientras 1: en absoluto.Es un número mágico de uso. En su lugar, si es necesario el uso de while True:.
Estoy de acuerdo. Sin embargo, como una mera curiosidad, while 1: es realmente más eficiente en Python 2, porque True hace una búsqueda (no es una palabra reservada como es en Python 3), mientras que 1 es conocido por ser verdadero – el código de byte está formado en realidad no la creación de un bloque para la while 1:. A observar, crear sus funciones y comparar dis.dis(func).
Muy interesante! Recuerdo haber leído una vez acerca de la genealogía de la Verdad en python, pero yo no sabía acerca de esto. Una razón más para ir a Python3, supongo.

OriginalEl autor ADE | 2011-10-15

7 Comentarios

  1. 6
    logfile = open('ip.log', 'r')
    loglist = logfile.readlines()
    logfile.close()
    found = False
    for line in loglist:
        if str(self.CLIENT_HOST) in line:
            print "Found it"
            found = True
    
    if not found:
        logfile = open('ip.log', 'a')
        logfile.write(str(self.CLIENT_HOST)+"\n")
        logfile.close()

    Esta es mi primera solución rápida. Muy sucio y no a la vez sofisticado, pero debería funcionar.

    Es inmundo e ineficiente.

    OriginalEl autor Andrej

  2. 4

    Creo que esto debería funcionar, y es más limpio y más robusto que el de cualquiera de las otras respuestas todavía. Si no, entonces puede que tenga que abrir otro archivo para escritura (primer archivo 'r', segundo archivo 'a'). También he ido por el uso de x.rstrip('\r\n') y == en lugar de in para asegurarse de que es correcta. No sé lo que su CLIENT_HOST variable. Si su CLIENT_HOST ya es un str, tirar la primera línea y cambiar a los demás para hacer referencia a él directamente.

    value = str(self.CLIENT_HOST)
    with open('ip.log', 'a+') as f:
        if not any(value == x.rstrip('\r\n') for x in f):
            f.write(value + '\n')
    OS X puede necesitar un adicional de f.seek(0) porque el puntero de archivo al final del archivo después de la apertura en «a+» de modo.

    OriginalEl autor Chris Morgan

  3. 2

    El uso de python filtro:

    file = open('ip.log', 'r')
    flines = file.readlines()
    res = filter(lambda x: self.CLIENT_HOST in x, flines)
    if len(res) == 0:
      file.write(str(self.CLIENT_HOST)+"\n")
      file.close()

    OriginalEl autor sramij

  4. 2

    Anexar al archivo de registro de un cliente de host de la cadena si no está ya presente usted podría:

    with open('ip.log', 'a+') as f:
         for line in f:
             if self.CLIENT_HOST in line:
                break
         else: # not found
             print >>f, self.CLIENT_HOST

    Nota: la sangría de la else declaración no es un error. Es una función Python para permitir for y while bucles de tener un else cláusula. Que se ejecuta si se break instrucción no se ejecuta en el interior del bucle.

    Totalmente subestimado y, en mi opinión, elegante solución. Gracias.

    OriginalEl autor jfs

  5. 0

    Cambio open(‘ip.registro’, ‘a+’) para abrir(‘ip.registro’, ‘r’), a continuación, escribir el archivo de nuevo más tarde o escribir a un archivo nuevo. De lo contrario, se acaba de hacer el archivo infinitamente más.

    OriginalEl autor Sunjay Varma

  6. 0

    La iteración a través de las líneas permite detener la carga del archivo cuando se encuentra una coincidencia, y evita tener que mantener el archivo en la memoria.

    def log_host(self):
        host = str(self.CLIENT_HOST)
    
        with open('ip.log', 'r+') as logfile:
            for line in logfile:
                if line.strip() == host:
                    return
    
            # Move to the end of the file:
            logfile.seek(0, 2)
            logfile.write(host + "\n")
    No estar ya en el final del archivo, ya que acaba de leer cada línea?

    OriginalEl autor Zack Bloom

  7. 0

    podría ser algo como esto

    line="the line you are searching for"
    
    logfile = open('ip.log', 'r')
    loglist = logfile.readlines()
    logfile.close()
    
    if line not in loglist:
        loglist.append(line)
    
    new_logfile = open("pathToTheFile/logfile", 'w')
    for lines in loglist:
        new_logfile.write(lines)

    OriginalEl autor DondoJJJ

Dejar respuesta

Please enter your comment!
Please enter your name here