Python file.tell дает неверное значение местоположения
Я пытаюсь извлечь несколько мест из существующего файла, используя Python. Это мой текущий код для извлечения локаций:
self.fh = open( fileName , "r+")
p = re.compile('regGen regPorSnip begin')
for line in self.fh :
if ( p.search(line) ):
self.porSnipStartFPtr = self.fh.tell()
sys.stdout.write("found regPorSnip")
Этот фрагмент повторяется несколько раз (за исключением открытия файла) с различными значениями поиска, и, похоже, работает: я получаю правильные сообщения, а переменные имеют значения.
Однако, используя приведенный ниже код, первое местоположение записи неверно, в то время как последующие места записи правильны:
self.fh.seek(self.rstSnipStartFPtr,0)
self.fh.write(str);
sys.stdout.write("writing %s" % str )
self.rstSnipStartFPtr = self.fh.tell()
Я прочитал, что мимоходомread
/readline
вариантыfh
может привести к ошибочному значению Tell из-за тенденции Python «читать вперед». Одним из предложений, которое я видел, чтобы избежать этого, является чтение всего файла и его перезапись, что не очень привлекательное решение в моем приложении.
Если я изменю первый фрагмент кода на:
for line in self.fh.read() :
if ( p.search(line) ):
self.porSnipStartFPtr = self.fh.tell()
sys.stdout.write("found regPorSnip")
Тогда кажется, чтоself.fh.read()
возвращает только символы, а не всю строку. Поиск никогда не совпадает. То же самое относится и кself.fh.readline()
.
Мой вывод таков, чтоfh.tell
возвращает только допустимые местоположения файлов, когда запрашивается после операции записи.
Есть ли способ извлечь точное местоположение файла при чтении / поиске?
Благодарю.