問題提出
最近,使用tqdm模塊,對於大文件的閱讀進行進度監控。然而我發現有個問題,即在tqdm模塊使用一定沒錯的情況下,進度條死活打印不出來。情況如下:
如上圖所示,這樣read file是沒有進度條顯示的。
問題解決
先說爲什麼,再說怎麼解決。
爲什麼沒有進度條
tqdm模塊的進度條顯示,是依賴於已知可迭代模塊的總迭代數的。如迭代一個list,該list有支持len()方法獲取其長度,這樣,進度條才能正確顯示。
但read file的思路顯然不是這樣。因爲read file的時候的迭代器,是每次閱讀以一個\n爲結尾的一行內容,當沒有newline的時候,迭代器結束迭代。這樣一來,read file的迭代器肯定無法自動提供len()方法,以獲取其迭代器的iter數。
如何解決
當然就是先提前獲取行數咯。這個東西沒什麼捷徑,唯一好的方法,可能就是
num_file = sum([1 for i in open("your-file-path.txt", "r")])
然後將num_file傳到tqdm中,賦值給total關鍵詞即可。具體如圖