Используйте метод file.tell()
.
Пример:
with open("file.txt", "r") as file:
print(file.tell()) # Выведет 0 (начало файла)
file.read(10)
print(file.tell()) # Выведет 10 (после чтения 10 байт)
tell()
. Этот метод возвращает целое число, представляющее текущую позицию указателя в файле в байтах относительно начала файла.
Пример при чтении:
with open("my_file.txt", "r") as f:
print("Начальная позиция:", f.tell()) # Вернет 0
data = f.read(10)
print("Прочитано:", data)
print("Текущая позиция:", f.tell()) # Вернет 10
f.seek(0) # Вернуться в начало файла
print("Позиция после seek(0):", f.tell()) # Вернет 0
Пример при записи:
with open("my_file.txt", "w") as f: # Открываем файл для записи, содержимое будет перезаписано
print("Начальная позиция:", f.tell()) # Вернет 0
f.write("Hello, world!")
print("Текущая позиция:", f.tell()) # Вернет 13 (количество байт в "Hello, world!")
f.seek(5) # Перейти к 6-ому байту
f.write("Python")
print("Текущая позиция:", f.tell()) # Вернет 11 - позиция после вставки "Python", учитывая длину "Hello" (5 символов) + длина "Python"(6 символов).
Важно:
tell()
можно использовать как с текстовыми, так и с бинарными файлами.seek()
позволяет изменить позицию указателя в файле на произвольное значение. Применяется для случайного доступа к файлу. Параметры seek(offset, whence)
: offset - смещение, whence - точка отсчета (0 - начало, 1 - текущая позиция, 2 - конец файла). Если whence не указан, то по умолчанию он равен 0.seek()
с whence, отличным от 0, может привести к непредсказуемым результатам, особенно если файл содержит многобайтовые символы (например, UTF-8), поскольку может нарушить целостность символов. В таких случаях рекомендуется оперировать позициями, полученными от tell()
.Когда это может быть полезно?