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
вернуть неожиданные позиции.
Я предлагаю вам сделать следующее:
- прочитать все строки из файла (
lines = f.readlines()
) - изменить
lines
переменная - переписать файл