python文件对象的大小和seek()

发布于 2024-11-06 22:36:21 字数 409 浏览 3 评论 0原文

我创建了一个包含以下条目的文件,由 file.read() 返回

'abcd\nefgh\n1234\nijkl\n5678\n\nend'

我现在用 'f' 打开要读取的文件作为处理程序。 f.read() 返回上述内容。 f.tell() 返回 35L sys.getsizeof(f) 返回 76。 尝试调用偏移量大于 35 的 f.seek(offset) 不会返回任何内容。

Python 文档说 file.seek() 以字节为单位移动。那么 sys.getsizeof()f.tell()/seek() 返回的内容是否不匹配?

I created a file with the following entry, returned by file.read()

'abcd\nefgh\n1234\nijkl\n5678\n\nend'

I open the file to read now, with 'f' as handler.
f.read() returns the above.
f.tell() returns 35L
sys.getsizeof(f) returns 76.
Trying to call f.seek(offset) with offset any higher than 35 returns nothing.

Python documentation says file.seek() moves in bytes. so is there a mismatch between what is returned by sys.getsizeof() and f.tell()/seek() ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怪我太投入 2024-11-13 22:36:21

sys.getsizeof 返回一个对象的大小(即一个file类实例在内存中占用多少字节),与文件的大小无关内容。

sys.getsizeof returns a size of an object (i.e. how many bytes a file class instance takes up in the memory), and has nothing to do with the size of the file contents.

十雾 2024-11-13 22:36:21
# size of the file in bytes
size = os.path.getsize(pathname)
# another way
f = file(pathname)
size = os.fstat(f.fileno()).st_size

参考文献

# size of the file in bytes
size = os.path.getsize(pathname)
# another way
f = file(pathname)
size = os.fstat(f.fileno()).st_size

References

橘虞初梦 2024-11-13 22:36:21

sys.getsizeof() 不会返回磁盘上文件的大小。相反,它返回文件对象(磁盘上真实文件的接口)在内存中占用的大小。

您甚至可以对没有任何磁盘存在的对象使用 sys.getsizeof() 。对于 instacen,如果 s = 'abcd',则调用 sys.getsizeof(s) 可能会返回(取决于您的实现)25,即使 s 是一个字符串,并且它在磁盘上没有任何空间。

sys.getsizeof() does not return the size of the file on disk. Instead, it returns the size that the file object (the interface to the real file on disk) takes up in memory.

You could even use sys.getsizeof() with objects that don't have any disk presence. For instacen, if s = 'abcd', then calling sys.getsizeof(s) might return (depending on your implementation) 25, even though s is a string, and it doesn't any space on disk.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文