2013-01-20 32 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