Документы для TextIOBase.tell , от которых наследуется TextIOWrapper
, состояние
Возвращает текущую позицию потока в виде непрозрачного числа. Число обычно не представляет количество байтов в базовом двоичном хранилище.
Мне интересно, будет ли оно всегда возвращать ноль в указанном c случае, когда указатель файла находится в начале файла?
Я написал небольшой неисчерпывающий скрипт для проверки некоторого очевидного сценария ios, который возвращал ноль для каждого случая:
import io
import os
rmodes = ['a', 'a+', 'r', 'r+']
wmodes = ['w', 'w+', 'a', 'a+', 'x', 'x+']
for m in wmodes:
with open('empty.txt', m) as f:
print(m, f.tell())
os.system('rm empty.txt')
for m in rmodes:
open('not-empty.txt', 'w').write('abc\n')
with open('non-empty.txt', m) as f:
f.seek(0, io.SEEK_SET)
print(m, f.tell())
if m == 'r':continue # avoid exception
with open('non-empty.txt', m) as f:
f.truncate()
print(m, f.tell())
Я верю этот код используется для генерации возвращаемого значения tell
static PyObject *
textiowrapper_build_cookie(cookie_type *cookie)
{
unsigned char buffer[COOKIE_BUF_LEN];
memcpy(buffer + OFF_START_POS, &cookie->start_pos, sizeof(cookie->start_pos));
memcpy(buffer + OFF_DEC_FLAGS, &cookie->dec_flags, sizeof(cookie->dec_flags));
memcpy(buffer + OFF_BYTES_TO_FEED, &cookie->bytes_to_feed, sizeof(cookie->bytes_to_feed));
memcpy(buffer + OFF_CHARS_TO_SKIP, &cookie->chars_to_skip, sizeof(cookie->chars_to_skip));
memcpy(buffer + OFF_NEED_EOF, &cookie->need_eof, sizeof(cookie->need_eof));
return _PyLong_FromByteArray(buffer, sizeof(buffer),
PY_LITTLE_ENDIAN, 0);
}
Очевидно, что он вычисляет больше, чем просто смещение указателя файла от начала файла. Но будет ли этот код всегда возвращать ноль в начале файла? Какие могут быть обстоятельства, при которых это не так?
Я
- сознаю, что поведение зависит от реализации и не гарантируется документами
- , специально спрашивающими о поведении в текстовых файлах, а не в двоичном
- , не спрашивая «как узнать, в начале ли я файла в Python?»
- , не запрашивая альтернативные способы получения позиция указателя файла