2013-01-20 26 views
0

我想为我的一个程序IN PYTHON实现一个命令行进度条,它可以逐行读取文件中的文本。保持字节数的读取

  1. (行数/总线)或
  2. (完成/字节总字节数)

I:

我可以通过以下两种方式中的一种实现的进展规模不关心哪个,但"number of lines"似乎要求我循环遍历整个文档(可能非常大),只是为了得到"total lines"的值。

这看起来效率极低。我在盒子外面思考,也许想过如果我把文件的大小(更容易得到?)和跟踪读取的字节数跟踪,这可能是一个很好的进度栏度量标准。

我可以使用os.path.getsize(file)os.stat(file).st_size来检索文件的大小,但我还没有找到一种方法来跟踪由readline()读取的字节数。我正在使用的文件应该用ASCII编码,或者甚至是Unicode编码,所以......我应该确定使用的编码,然后记录读取或使用os.getsizeof()或某些len()函数读取的每行字符数?

我相信这里会有问题。有什么建议么? (PS - 我不认为手动输入要一次读取的字节数是可行的,因为我需要单独使用每一行;否则,我需要在之后将它拆分为“\ n “'S)

回答

0
bytesread = 0 
while True: 
    line = fh.readline() 
    if line == '': 
    break 
    bytesread += len(line) 

或者,更短一点:

bytesread = 0 
for line in fh: 
    bytesread += len(line) 

使用os.path.getsize()(或os.stat)是确定文件大小的有效方法。

+1

而不是在'data'上实际使用'len'。你也可以使用'file.tell()'来获取当前位置并摆脱所需的大部分跟踪。 – Wessie