Python文件对象的大小与seek()
我创建了一个文件,里面的内容是通过 file.read()
得到的:
'abcd\nefgh\n1234\nijkl\n5678\n\nend'
现在我打开这个文件来读取,使用 'f' 作为文件处理器。
f.read()
返回了上面的内容。
f.tell()
返回的是 35L。
sys.getsizeof(f)
返回的是 76。
如果我尝试用 f.seek(offset)
来设置偏移量,任何大于 35 的值都没有反应。
Python 的文档说 file.seek()
是按字节移动的。那么 sys.getsizeof()
返回的和 f.tell()/seek()
之间是不是有什么不一致的地方呢?
3 个回答
4
# size of the file in bytes
size = os.path.getsize(pathname)
# another way
f = file(pathname)
size = os.fstat(f.fileno()).st_size
参考资料
- os.path.getsize - 这个链接可以让你了解如何获取文件的大小。
- os.fstat - 这个链接提供了关于如何获取文件状态的信息。
- f.fileno - 这个链接讲解了如何获取文件的描述符。
7
sys.getsizeof
是一个用来获取对象大小的函数(也就是说,它可以告诉你一个 file
类的实例在内存中占用了多少字节),但它和文件内容的大小没有关系。
3
sys.getsizeof() 并不是用来返回文件在硬盘上占用的大小。它实际上是告诉你这个文件对象(也就是和硬盘上真实文件的接口)在内存中占用了多大的空间。
你甚至可以用 sys.getsizeof() 来查看那些根本不存在于硬盘上的对象的大小。比如,如果 s = 'abcd'
,那么调用 sys.getsizeof(s)
可能会返回 25(具体数字可能因你的系统而异),尽管 s 是一个字符串,它在硬盘上并没有占用任何空间。