python .tell(), дающий неожиданную позицию в файле?

Я пытаюсь работать над функцией, которая изменит переменную в скрипте в зависимости от пользовательского ввода. Я начал использовать .tell() встроенный, чтобы точно определить сравниваемую переменную, но позиция, в которую он записывает, выключена как минимум на 10 байтов?

#! /usr/bin/env python
import re

class file_input:
    def __init__(self):
        count = 0
        change = raw_input('Input? ')
        with open('/home/Downloads/FILES/adobe.py','a+') as f:
            for line in f.readlines():
                if re.findall('script_data', line):
                    count += 1
                    ## i put in a count to ignore the first 'script_data' mentioned in the __init__ method ##
                    if change != line[13:] and count == 2:
                        ## if the user-input is not the same, re-write that variable ##
                        pos = f.tell()
                        f.seek(pos)
                        ## i checked the position here and its not where i would think it would be ##
                        print pos
                        print 'data not matched up, changing now...'
                        f.write(change)
                        print line[13:]
        f.close()



if __name__ == '__main__':
    file_input()


script_data = 'this is going to be some data...'

Когда я иду, чтобы проверить файл, хотя script_data переменная все еще будет там, даже если входные данные были другими, а новые данные будут в строке ниже.

1 ответ

Решение

Небезопасно предполагать что-либо о положении файла во время readlines(), Реализация может прочитать весь файл, использовать буфер опережающего чтения и т. Д., Что приведет к tell вернуть неожиданные позиции.

Я предлагаю вам сделать следующее:

  1. прочитать все строки из файла (lines = f.readlines())
  2. изменить lines переменная
  3. переписать файл
Другие вопросы по тегам