tqdm模塊在處理文件閱讀時,如何顯示出進度條?

問題提出

最近,使用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關鍵詞即可。具體如圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章