Я пытаюсь извлечь несколько мест из существующего файла с помощью 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
может привести к ошибочному значению сообщения из-за склонности 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
возвращает действительные местоположения файлов только при запросе после операции записи.
Есть ли способ извлечь точное местоположение файла при чтении/поиске?
Спасибо.