2008-11-29 9 views
5

La última línea de mi archivo es:¿Cómo modifico la última línea de un archivo?

29-dez, 40,

¿Cómo puedo modificar esa línea para que se lea:

29-Dic, 40 , 90,100,50

Nota: No quiero escribir una nueva línea. Quiero tomar la misma línea y poner nuevos valores después de 29-Dez,40,

Soy nuevo en python. Tengo muchos problemas para manipular archivos y para mí cada ejemplo que veo parece difícil.

+0

Es difícil porque es difícil. Lo que estás haciendo no es realmente sensato para los archivos de texto con líneas de longitud variable. –

+0

Consulte http://stackoverflow.com/questions/328059/create-a-list-that-contain-each-line-of-a-file para ver lo que parece el seguimiento de esta pregunta. –

+0

He modificado su pregunta bastante significativamente, hágamelo saber si he entendido mal algo. S. Lott también tiene razón, aunque parece que debería ser simple, modificar un archivo es bastante difícil. –

Respuesta

0

No trabaje con archivos directamente, cree una estructura de datos que se adapte a sus necesidades en forma de clase y haga métodos de lectura/escritura en archivos.

4

A menos que el archivo sea enorme, probablemente le resultará más fácil leer todo el archivo en una estructura de datos (que podría ser una lista de líneas), modificar la estructura de datos en la memoria y finalmente escribirla volver al archivo.

Por otro lado, tal vez su archivo es realmente enorme: varios GB al menos. En ese caso: la última línea probablemente termine con un nuevo carácter de línea; si busca esa posición, puede sobrescribirla con el nuevo texto al final de la última línea.

Así que tal vez:

f = open("foo.file", "wb") 
f.seek(-len(os.linesep), os.SEEK_END) 
f.write("new text at end of last line" + os.linesep) 
f.close() 

(finales de línea Modulo en diferentes plataformas)

+0

Para Python 3.2 y posteriores, puede realizar la operación de búsqueda solo desde el comienzo de un archivo (archivo de texto). – derek

2

ampliar lo Doug said, con el fin de leer el contenido del archivo en una estructura de datos que puede utilizar el readlines() method de la objeto de archivo

El ejemplo de código se lee el archivo en una lista de "líneas", las ediciones de la última línea, entonces lo escribe de vuelta al archivo:

#!/usr/bin/python 

MYFILE="file.txt" 

# read the file into a list of lines 
lines = open(MYFILE, 'r').readlines() 

# now edit the last line of the list of lines 
new_last_line = (lines[-1].rstrip() + ",90,100,50") 
lines[-1] = new_last_line 

# now write the modified list back out to the file 
open(MYFILE, 'w').writelines(lines) 

Si el archivo es muy grande, entonces este enfoque no funciona bien, porque esto lee todas las líneas de archivo en la memoria cada vez y las vuelve a escribir en el archivo, lo que es muy ineficiente. Para un archivo pequeño, sin embargo, esto funcionará bien.

0

Recientemente escribí un script para hacer algo muy similar a esto. Atravesaría un proyecto, encontraría todas las dependencias del módulo y agregaría cualquier declaración de importación faltante. No llenaré este post con todo el guión, pero les mostraré cómo modifiqué mis archivos.

import os 
from mmap import mmap 

def insert_import(filename, text): 
    if len(text) < 1: 
     return 
    f = open(filename, 'r+') 
    m = mmap(f.fileno(), os.path.getsize(filename)) 
    origSize = m.size() 
    m.resize(origSize + len(text)) 
    pos = 0 
    while True: 
     l = m.readline() 
     if l.startswith(('import', 'from')): 
      continue 
     else: 
      pos = m.tell() - len(l) 
      break 
    m[pos+len(text):] = m[pos:origSize] 
    m[pos:pos+len(text)] = text 
    m.close() 
    f.close() 

Resumen: Este fragmento toma un nombre de archivo y una burbuja de texto para insertar. Encuentra la última instrucción de importación ya presente y pega el texto en esa ubicación.

La parte que sugiero prestar más atención es el uso de mmap. Le permite trabajar con archivos de la misma manera que puede trabajar con una cadena. Muy útil.

Cuestiones relacionadas