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

时间:2011-05-12 12:02:22

标签: python file sys

我使用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()返回的内容之间是否存在不匹配?

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

参考

答案 2 :(得分:3)

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

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