Ich verwende tqdm
, um den Fortschritt in einem Skript zu drucken, das ich in einem Jupyter-Notizbuch ausführe. Ich drucke alle Nachrichten über an die Konsoletqdm.write()
. Dies gibt mir jedoch immer noch eine verzerrte Ausgabe wie folgt:
Das heißt, jedes Mal, wenn eine neue Zeile gedruckt werden muss, wird in der nächsten Zeile ein neuer Fortschrittsbalken gedruckt. Dies passiert nicht, wenn ich das Skript über das Terminal ausführe. Wie kann ich das lösen?
python
jupyter-notebook
tqdm
Rohan Saxena
quelle
quelle
tqdm_notebook
, kann ich sogar normaleprint
s machen, und es hat keinen Einfluss auf den Fortschrittsbalken.progressbar
stackoverflow.com/questions/3160699/python-progress-bar/…Antworten:
Versuchen Sie es mit
tqdm.notebook.tqdm
anstelle vontqdm
, wie hier beschrieben .Dies kann so einfach sein wie das Ändern Ihres Imports in:
from tqdm.notebook import tqdm
Viel Glück!
BEARBEITEN: Nach dem Testen scheint es, dass es
tqdm
im 'Textmodus' in Jupyter Notebook tatsächlich gut funktioniert. Es ist schwer zu sagen, da Sie kein minimales Beispiel angegeben haben , aber es sieht so aus, als ob Ihr Problem durch eine print-Anweisung in jeder Iteration verursacht wird. Die print-Anweisung gibt zwischen jeder Statusleistenaktualisierung eine Zahl (~ 0,89) aus, wodurch die Ausgabe durcheinander gebracht wird. Versuchen Sie, die print-Anweisung zu entfernen.quelle
print()
Aussage verwendet, ich habe verwendettqdm.write()
. Allerdingstqdm_notebook
gibt gute Ergebnisse. Danketqdm
eher einfach alstqdm_notebook
? Dies funktioniert gut mit Python 3.6 und Jupyter 1.0.0.Dies ist eine alternative Antwort für den Fall, dass tqdm_notebook für Sie nicht funktioniert.
Anhand des folgenden Beispiels:
Die Ausgabe würde ungefähr so aussehen (Fortschritt würde rot angezeigt):
Das Problem ist, dass die Ausgabe an stdout und stderr asynchron und getrennt in Bezug auf neue Zeilen verarbeitet wird.
Wenn sagen, Jupyter empfängt auf stderr die erste Zeile und dann die "verarbeitete" Ausgabe auf stdout. Sobald es eine Ausgabe auf stderr erhält, um den Fortschritt zu aktualisieren, würde es nicht zurückgehen und die erste Zeile aktualisieren, da es nur die letzte Zeile aktualisieren würde. Stattdessen muss eine neue Zeile geschrieben werden.
Problemumgehung 1, Schreiben an stdout
Eine Problemumgehung wäre, stattdessen beide in stdout auszugeben:
Die Ausgabe ändert sich zu (nicht mehr rot):
Hier können wir sehen, dass Jupyter erst am Ende der Zeile zu klären scheint. Wir könnten eine weitere Problemumgehung hinzufügen, indem wir Leerzeichen hinzufügen. Sowie:
Was uns gibt:
Problemumgehung 2: Legen Sie stattdessen die Beschreibung fest
Im Allgemeinen ist es möglicherweise einfacher, nicht zwei Ausgänge zu haben, sondern stattdessen die Beschreibung zu aktualisieren, z.
Mit der Ausgabe (Beschreibung während der Verarbeitung aktualisiert):
Fazit
Sie können es meistens mit normalem tqdm zum Laufen bringen. Aber wenn tqdm_notebook für Sie funktioniert, verwenden Sie das einfach (aber dann würden Sie wahrscheinlich nicht so weit lesen).
quelle
progressbar
stackoverflow.com/a/34482761/1207193Die meisten Antworten sind jetzt veraltet. Besser, wenn Sie tqdm korrekt importieren .
quelle
TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0 Please use tqdm.notebook.tqdm instead of tqdm.tqdm_notebook
Wenn die anderen Tipps hier nicht funktionieren und Sie - genau wie ich - die
pandas
Integration verwendenprogress_apply
, können Sie sich damittqdm
befassen:Der Hauptpunkt liegt hier im
tqdm.autonotebook
Modul. Wie in angegeben in IPython Notebooks ihre Anweisungen für die Verwendung , das machttqdm
wählen zwischen verschiedenen Formaten Fortschrittsbalken verwendet in Jupyter Notebooks und Jupyter Konsolen - für einen Grund , noch weitere Untersuchungen an meiner Seite fehlt, von der gewählten spezifischen Formattqdm.autonotebook
funktioniert reibungslospandas
, während alle anderen didn nichtprogress_apply
speziell.quelle
Um die Antwort von oscarbranson zu vervollständigen: Es ist möglich, automatisch Konsolen- oder Notebook-Versionen des Fortschrittsbalkens auszuwählen, je nachdem, von wo aus es ausgeführt wird:
Weitere Infos finden Sie hier
quelle
Keines der oben genannten funktioniert für mich. Ich finde, dass das Ausführen von Folgendem dieses Problem nach einem Fehler sortiert (es löscht nur alle Instanzen von Fortschrittsbalken im Hintergrund):
quelle
try: # Avoids problem on notebooks / Hydrogen IDE tqdm.tqdm._instances.clear() except Exception: pass
Verwenden Sie tqdm_notebook
aus tqdm importiere tqdm_notebook als tqdm
x = [1,2,3,4,5]
für i in tqdm (len (x)):
quelle
Für alle, die unter Windows arbeiten und das Problem der Duplizierungsbalken mit keiner der hier genannten Lösungen lösen konnten. Ich musste das
colorama
Paket wie in den bekannten Problemen von tqdm beschrieben installieren, die es behoben haben.Versuchen Sie es mit diesem Beispiel:
Welches wird so etwas wie produzieren:
quelle