Autor Tema: [Python] Remplazar una línea en un archivo editar un fichero txt y reemplazar  (Leído 8316 veces)

diego200052

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Buenas, he buscado por toda la web pero no he encontrado una respuesta fiable a este problema, lo que pasa es que quiero editar una linea de un archivo .txt en python pero aquí está la problemática:

Encontré métodos que copian las líneas a una lista, editan la lista y luego copian la lista a un archivo. Pero quiero saber si hay forma de editar el archivo sin tener que volver a copiar otra vez todo su contenido (obviamente ya editado).

Ojála puedan ayudarme, esto lo quiero hacer porque tengo que hacer un proyecto pero como base de datos tengo que usar un archivo .txt y tengo implementado eso, que lea todo el archivo guarde las lineas leídas en listas, luego se modifican y cuando se quiera guardar copia la lista a el archivo, pero no sé si sea eficiente eso.

Nota: No me dejan usar Mysql ni SqlLite, sólamente un simple archivo de texto.
« Última modificación: 26 de Abril 2016, 08:26 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, la línea a editar o modificar tendrá que ser elegida en base a algún criterio, por ejemplo contener algo que deba ser reemplazado (quizás la línea entera podría reemplazarse).

Hay distintas alternativas para hacer esto:

Escribir el contenido en un nuevo fichero y reemplazar el viejo fichero con el nuevo:

Código: [Seleccionar]
from tempfile import mkstemp
from shutil import move
from os import remove, close

def replace(file_path, pattern, subst):
    #Create temp file
    fh, abs_path = mkstemp()
    with open(abs_path,'w') as new_file:
        with open(file_path) as old_file:
            for line in old_file:
                new_file.write(line.replace(pattern, subst))
    close(fh)
    #Remove original file
    remove(file_path)
    #Move new file
    move(abs_path, file_path)

Añadir contenido a líneas en el fichero que se quiere editar (en este ejemplo se añade el número de línea):

Código: [Seleccionar]
import fileinput

for line in fileinput.input("test.txt", inplace=True):
    print "%d: %s" % (fileinput.filelineno(), line),

Reemplazar un patrón en el fichero usando expresiones regulares, se usaría como por ejemplo replaceAll("/ejemplo.txt","Hola\sMundo!$","Adios\sMundo."):

Código: [Seleccionar]
import fileinput
import sys

def replaceAll(file,searchExp,replaceExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp in line:
            line = line.replace(searchExp,replaceExp)
        sys.stdout.write(line)

Reemplazo:

Código: [Seleccionar]
import fileinput

# Does a list of files, and
# redirects STDOUT to the file in question
for line in fileinput.input(files, inplace = 1):
      print line.replace("foo", "bar"),

Reemplazo masivo:

Código: [Seleccionar]
import re

def replace(file, pattern, subst):
    # Read contents from file as a single string
    file_handle = open(file, 'r')
    file_string = file_handle.read()
    file_handle.close()

    # Use RE package to allow for replacement (also allowing for (multiline) REGEX)
    file_string = (re.sub(pattern, subst, file_string))

    # Write contents to file.
    # Using mode 'w' truncates the file.
    file_handle = open(file, 'w')
    file_handle.write(file_string)
    file_handle.close()

Saludos

diego200052

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Muchas gracias, me ayudó mucho  ;)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".