2008-11-29 2 views
5

Последняя строка моего файла:Как изменить последнюю строку файла?

29-Дез, 40,

Как я могу изменить эту строку так, что он читает:

29-Дез, 40 , 90 100,50

Примечание: Я не хочу писать новую строку. Я хочу взять ту же строку и поместить новые значения после 29-Dez,40,

Я новичок в python. У меня много проблем с манипулированием файлами, и для меня каждый пример, на который я смотрю, кажется трудным.

+0

Это сложно, потому что это сложно. То, что вы делаете, не очень разумно для текстовых файлов с линиями переменной длины. – 2008-11-29 21:28:15

+0

См. Http://stackoverflow.com/questions/328059/create-a-list-that-contain-each-line-of-a-file для того, что похоже на продолжение этого вопроса. – 2008-11-29 22:52:00

ответ

0

Не работайте с файлами напрямую, создавайте структуру данных, которая соответствует вашим потребностям в форме класса и позволяет читать или записывать файлы.

4

Если файл не является огромным, вам, вероятно, будет легче читать весь файл в структуру данных (которая может быть просто списком строк), а затем изменить структуру данных в памяти и, наконец, написать ее вернуться к файлу.

С другой стороны, может быть, ваш файл is действительно огромный - несколько GB по крайней мере. В этом случае: последняя строка, вероятно, заканчивается новым символом строки, если вы ищете эту позицию, вы можете перезаписать ее новым текстом в конце последней строки.

Так что, возможно:

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() 

(Modulo линия окончаний на разных платформах)

2

расширить свое присутствие на каком Doug said, для того, чтобы прочитать содержимое файла в структуру данных вы можете использовать readlines() method из файловый объект.

Ниже пример кода считывает файл в списке «линий», редактирует последнюю строку, а затем записывает его обратно в файл:

#!/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) 

Если файл очень большой, то этот подход будет не работает, потому что это каждый раз считывает все строки файлов в память и записывает их обратно в файл, что очень неэффективно. Однако для небольшого файла это будет работать нормально.

0

Недавно я написал сценарий, чтобы сделать что-то очень похожее на это. Он пересечет проект, найдет все зависимости модуля и добавит любые отсутствующие операторы импорта. Я не буду помешать этому сообщению всем сценарием, но я покажу, как я начал изменять мои файлы.

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() 

Резюме: Этот фрагмент принимает имя файла и текст вставляемого текста. Он находит последний оператор импорта уже присутствующим и вставляет текст в это место.

Часть, на которую я предлагаю обратить внимание больше всего на использование mmap. Он позволяет работать с файлами так же, как вы можете работать со строкой. Очень удобно.

Смежные вопросы