2015-09-11 2 views
0

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

Из чего я понимаю, я позиционирую курсор 3 символа с конца, а затем, когда я пишу output, myfile, он должен был перезаписать предыдущие 3 символа. Но когда я смотрю в файл, эти 3 символа просто присоединяются к концу.

with open("C:\\Windows\\Temp\\trace.html", "a+") as myfile: 
       if hasNoSource and not fileHasChanged: 
        myfile.seek(-3,2) 
        output = line 
       else: 
        self.noSourceCallCount = 0 
       myfile.write(output) 
      return self.lineHook 

ответ

1

Режим «a +» открыт для добавления режима, и любые изменения с помощью seek() будут сброшены следующей записью(). Используйте режим «r +».

+0

Я на самом деле читать эту точную строку, но интерпретировать это означает, что сбросить курсор после писать, а не раньше. –

0

FileInput модуль с INPLACE вариант позволяет изменить файл, но не забудьте сделать резервную копию, если весь ад вырваться

import fileinput,sys,re 
line_count=0 
for line in open(my_file): 
    line_count+=1     # count total lines in file 
f=fileinput.input(my_file,inplace=True) 
for line in f: 
    line_count-=1  #when iterating through every line decrement line_count by 1 
    if line_count==0: 
     line=re.sub("...$",<replacement>,line) #use regex to replace first three characters in the last line 
     sys.stdout.write(line) #print line to sys.stdout which will automatically make the changes to this line in file. 
    else: 
     sys.stdout.write(line) 
+0

Примечание: - это то, где вы вводите желаемого персонажа – repzero