Я создал файл со следующей записью, возвращенной file.read()
'ABCD\nefgh\N1234\nijkl\n5678\п\Nend'
Теперь я открываю файл для чтения с помощью "f" в качестве обработчика.
f.read()
возвращает вышеизложенное.
f.tell()
возвращает 35L
sys.getsizeof(f)
возвращает 76.
Попытка позвонить f.seek(offset)
со смещением, превышающим 35, ничего не возвращает.
Документация Python говорит, что file.seek()
перемещается в байтах. так что существует несоответствие между тем, что возвращается sys.getsizeof()
и f.tell()/seek()
?
sys.getsizeof() не возвращает размер файла на диске. Вместо этого он возвращает размер, который в памяти занимает файл файл (интерфейс к реальному файлу на диске).
Вы даже можете использовать sys.getsizeof() с объектами, у которых нет присутствия на диске. Для instacen, если s = 'abcd'
, вызов sys.getsizeof(s)
может возвратиться (в зависимости от вашей реализации) 25, хотя s является строкой, и на нем нет свободного места на диске.
sys.getsizeof
возвращает размер объекта (т.е. сколько байтов a file
экземпляр класса занимает в памяти) и не имеет ничего общего с размером содержимого файла.
# size of the file in bytes
size = os.path.getsize(pathname)
# another way
f = file(pathname)
size = os.fstat(f.fileno()).st_size