## Работа с указателями в файле
### tell()
> tell () - возвращает позицию указателя относительно начала файла в виде целого чис
ла. Обратите внимание на то, что в Windows метод tell () считает символ \r как допол
нительный байт, хотя этот символ удаляется при открытии файла в текстовом режиме.
Пример:
```python
with open(r"file.txt", "w", encoding="cp1251") as f:
f. write ( "String1 \nString2")
15
f = open(r"file.txt", "r", encoding="cp1251")
f.tell() #Указатель расположен в начале файла
о
f.readline() #· Перемещаем указатель
'String1\n'
f.tell() #Возвращает 9 (8 + '\r'), а не 8 ! ! !
9
f. close ()
```
Чтобы избежать этого несоответствия, следует открывать файл в бинарном режиме, а не
в текстовом:
```python
f = open(r"file.txt", "rb")
f.readline() # Перемещаем указатель
b'Stringl\r\n'
f. tell () # Теперь значение соответствует
9
f.close()
```
### seek()
> seek (<СМещение> [, <Позиция>]) - устанавливает указатель в позицию, имеющую сме
щение <Смещение> относительно позиции <Позиция>. В параметре <Поз~ция> могут быть
указаны следующие атрибуты из модуля io или соответствующие им значения:
• io.SEEK_SET илио-начало файла (значение по умолчанию);
• io. SEEK _ cuR или 1 -текущая позиция указателя;
• io. SEEK _ END или 2 - конец файла.
Выведем значения этих атрибутов:
```python
import io
io.SEEK_SET, io.SEEK_CUR, io.SEEK END
(0, 1, 2)
Пример использования метода seek ():
import io
f = open(r"file.txt", "rb")
f.seek(9, io.SEEK_CUR) # 9 байтов от указателя
f.tell()
9
f.seek(O, io.SEEK_SET) ~ Перемещаем указатель в начало
о
f. tell ()
о
f .seek(-9, io.SEEK_END) ~ -9 байтов от конца файла
7
f.tell()
7
f .close ()
```