1

我在linux中工作。我想显示已解析文件的百分比。这就是为什么在读了一点之后我决定最准确的方法是获取我正在解析的文件的总大小(字节),然后在读取后计算每行的大小(字节)。

这是我的虚拟简化代码。

if __name__ == '__main__':

read_bytes = 0
total_file_size = os.path.getsize(myfile)

with open(myfile, 'r') as input_file:
    for line in input_file:
        read_bytes += sys.getsizeof(line)

        print "do my stuff"

print total_file_size
print read_bytes

输出是:

193794194

203979278

显然,有一些因素正在增加总规模。我试过:

read_bytes += sys.getsizeof(line) - sys.getsizeof('\n')

输出是:

193794194

193309190

我肯定错过了什么。

4

2 回答 2

1

使用len代替sys.getsizeof()

sys.getsizeof()返回解释器使用的字节来保存该对象。

>>> len('asdf')
4
>>> import sys
>>> sys.getsizeof('asdf')
37

除此之外,如果您在 Window 中运行程序,您应该使用二进制模式。

open(myfile, 'rb')

笔记

使用file.tell,您不需要计算当前位置。

于 2013-08-14T14:05:31.273 回答
0

代替:

read_bytes += sys.getsizeof(line) - sys.getsizeof('\n') 
with read_bytes += sys.getsizeof(line) - sys.getsizeof('\n') - 49 as 49 is ascii of '0'
于 2020-08-28T06:08:40.110 回答