Progress Bars in Python Terminal

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ส.ค. 2024
  • Today we learn how to create and display progress bars in the command line of a Python application.
    ◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾
    📚 Programming Books & Merch 📚
    🐍 The Python Bible Book: www.neuralnine.com/books/
    💻 The Algorithm Bible Book: www.neuralnine.com/books/
    👕 Programming Merch: www.neuralnine.com/shop
    🌐 Social Media & Contact 🌐
    📱 Website: www.neuralnine.com/
    📷 Instagram: / neuralnine
    🐦 Twitter: / neuralnine
    🤵 LinkedIn: / neuralnine
    📁 GitHub: github.com/NeuralNine
    🎙 Discord: / discord
    🎵 Outro Music From: www.bensound.com/
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 150

  • @Sinke_100
    @Sinke_100 2 ปีที่แล้ว +39

    chr(9608) for filing bar and chr(9617) for blank

    • @mvuto137
      @mvuto137 ปีที่แล้ว +2

      I was eight months late, and all I had to offer was a sad, chr(219) lol
      Thanks for the filled in version.

  • @aeyyatal
    @aeyyatal 2 ปีที่แล้ว +17

    If you run it in PyCharm, in Run window, below the play icon is a cog icon -> under "execution" you can select "Emulate terminal in output console" . This will make the progressbar render properly (also realy usefull if you stuff from the rich libary).

    • @fakezpred
      @fakezpred 2 ปีที่แล้ว +1

      Holy crap thanks for this tip.

  • @SirFloIII
    @SirFloIII 2 ปีที่แล้ว +21

    in python 3 the division int / int returns a float automatically. if you want integer division, you can use //.

  • @benlong1062
    @benlong1062 2 ปีที่แล้ว +6

    That was fun to follow along with, somewhat simple (or at least not overly complicated), and the result looks great! Thanks!

  • @carlosmspk
    @carlosmspk 2 ปีที่แล้ว +5

    If you clicked this video looking for an already made progress bar that you can use straight away, use the "tdqm" package. It's generic, lightweight, and very good for performance, and comes with time estimation by default!

  • @BautyParra
    @BautyParra ปีที่แล้ว

    small video and to the point in a simple way, love it! Thanks for this

  • @vest2240
    @vest2240 2 ปีที่แล้ว +2

    Had been looking for something like this for a while, your videos are awesome.

  • @SpaghettDev
    @SpaghettDev 2 ปีที่แล้ว +37

    Just a heads up, you can use os.system("") with an empty string argument to display colors in a cmd prompt

    • @Wald246
      @Wald246 2 ปีที่แล้ว

      how does that work?

    • @castles990
      @castles990 2 ปีที่แล้ว +1

      @@Wald246 dont do this

    • @Victor_Marius
      @Victor_Marius 2 ปีที่แล้ว

      came here to point the exact same thing

    • @Victor_Marius
      @Victor_Marius 2 ปีที่แล้ว +2

      @@Wald246 os.system attemts to call an external command and it changes the settings of the terminal. It is like calling colorama.init() and it works with a real command like cls. You can use this trick on windows to avoid the use of colorama or other library (of course you'll have to know the escape sequences:
      \033[0m; - to reset all,
      \033[ (30-37 | 90-97 - foreground); (40-47 | 100-107 - background)m
      example:
      os.system("cls") # or just os.system("")
      print("\033[94;103m< bright blue on bright yellow >\033[0m < normal text >")
      And also works in windows 10 CMD (Command Prompt).
      But calling external commands (specially OS dependent) it is not a good ideea and should stick to colorama.init(). Also I like using the VT escape sequences because there are a lot more than what colorama has, like for moving the cursor around (\033[nA, \033[nB and
      \033[nC, where n is a natural number), erasing lines (\033[0K and \033[0J) or changiing the terminal title (print("\033]0;My Title\007", end=""))

    • @ankushbhagatofficial
      @ankushbhagatofficial 7 หลายเดือนก่อน

      you can simply do with Ansi code:
      print("\33[92mHello, World\33[0m")

  • @maurolimaok
    @maurolimaok 6 หลายเดือนก่อน

    I don´t know how to code yet. First steps on Odin, but I bookmarked the channel.
    Thanks a lot for the videos!

  • @MagnusAnand
    @MagnusAnand 2 ปีที่แล้ว

    Dude, this video was super cool !!

  • @nbamol5453
    @nbamol5453 2 ปีที่แล้ว

    Bro coming with sick projects 🥵🔥🔥

  • @manometer7854
    @manometer7854 2 ปีที่แล้ว +8

    Thanks a million for this video! I was just looking for such a solution ... and you saved my day! Thx, thx, thx!

    • @harrytsang1501
      @harrytsang1501 2 ปีที่แล้ว +2

      If you are just looking to add a progress bar to your program, you can wrap an iterator in tqdm.tqdm(). It shows iterations per second and expected finish time

    • @manometer7854
      @manometer7854 2 ปีที่แล้ว

      @@harrytsang1501 indeed - amazing! Thx for this hint!

  • @mrmuranga
    @mrmuranga 2 ปีที่แล้ว +1

    you rock....
    trying to keep up with the videos...
    awesome stuff...👍🏿thanks
    please cover more of opencv comparing facial images..I already saw the fingerprint example

  • @BlueberryCats_
    @BlueberryCats_ 2 ปีที่แล้ว

    That moment where i was thinking about this this morning, and now it’s top of my recommendation list .-.

  • @jeanmi8184
    @jeanmi8184 2 ปีที่แล้ว

    Voilà là, vous me faites plaisir

  • @kernelpanic2927
    @kernelpanic2927 10 หลายเดือนก่อน

    Good tutorial, thanks!

  • @juancardona722
    @juancardona722 ปีที่แล้ว

    Amazing!
    Thank you a loads.

  • @ReadieFur
    @ReadieFur 2 ปีที่แล้ว

    I made a similar thing in C# in the past but the fun came when having to write code to not make the lines move to different parts of the screen upon console resize.

  • @mylabszone
    @mylabszone 2 ปีที่แล้ว

    great content, great didactic. Congrats!

  • @devbites77
    @devbites77 2 ปีที่แล้ว

    Useful stuff and to the point. I like your style.

    • @melvilli69
      @melvilli69 2 ปีที่แล้ว

      it happens when the window doesn't have enough width. change it to maximized mode or move it into a new workspace with enough room

  • @alainrouleau
    @alainrouleau 2 ปีที่แล้ว

    Very interesting, thanks! 👍

  • @driouichelmahdi
    @driouichelmahdi 2 ปีที่แล้ว +1

    Great videos THX

  • @alienslullaby
    @alienslullaby 2 ปีที่แล้ว

    love it!

  • @jackfr0st486
    @jackfr0st486 2 ปีที่แล้ว +4

    Perfect just what i was looking for...
    Btw, do you know how to get the progressbar used in the latest pip3 command. I think that would be a lot cooler.

  • @thienviet3429
    @thienviet3429 ปีที่แล้ว

    Thank you that you created for me a skill bar :D

  • @sudoggo
    @sudoggo 7 หลายเดือนก่อน

    You don't need to do index + 1. enumerate function takes an optional argument `start` that defaults to 0. So you can just do enumerate(iterable, 1)

  • @Imdazedandconfuzed
    @Imdazedandconfuzed 2 ปีที่แล้ว

    The terminal can be run from PyCharm.
    The bar in the bottom left hand side that says “Version Control, TODO, Problems, Terminal, Python Packages, Python Console”
    Click the Terminal tab.

  • @nameundefined6265
    @nameundefined6265 2 ปีที่แล้ว +19

    In fact CMD can display colors like a Unix terminal (however it won't render italics or bold or any font transforms), you just need to set a registery key called TerminalLevel to 1
    Here is the command to do so
    reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 00000001

    stands for "Carage return"
    Have a great day
    - 0x454d505459

    • @vaisakhkm783
      @vaisakhkm783 2 ปีที่แล้ว

      @name undefined.... why you are EMPTY :)

    • @DFPercush
      @DFPercush 2 ปีที่แล้ว +2

      This can be done programmatically without affecting the whole system by using windows api functions
      handle = GetStdHandle(STD_OUTPUT_HANDLE) # ((DWORD) -11)
      SetConsoleMode(handle, ENABLE_VIRTUAL_TERMINAL_PROCESSING) # (0x0004).

    • @nameundefined6265
      @nameundefined6265 2 ปีที่แล้ว

      @@vaisakhkm783 ;)

    • @SpaghettDev
      @SpaghettDev 2 ปีที่แล้ว

      you do know you can just use os.system("") with an empty string and that'll activate colors in a cmd right?

  • @MakaroniiMisiek
    @MakaroniiMisiek 2 ปีที่แล้ว

    Amazing ! :)

  • @BrandonJacobson
    @BrandonJacobson 2 ปีที่แล้ว +1

    I'm assuming you can use this or tqdm and pass it to a GUI library like Tkinter to get a non-command line progress bar?

  • @crackedatcurry
    @crackedatcurry 2 ปีที่แล้ว

    NeuralNine ON TOP

  • @hydraxmoi
    @hydraxmoi 2 ปีที่แล้ว +2

    Hello, can you show us how to implement graphics in python? Your python videos are great. Many thanks!

  • @michaelv6304
    @michaelv6304 ปีที่แล้ว

    All these years I never knew that print(..., end='
    ') will actually do a carriage return to the same line in a Windows console, lol. THANKS!

  • @paulus_de_gross5996
    @paulus_de_gross5996 ปีที่แล้ว

    you can display the progressbars in pycharm by going to the run-config of the script and then enabeling "Emulate terminal in output console" at "Execution"

  • @tban8905
    @tban8905 3 หลายเดือนก่อน

    I like that guy. Already watched the vim videos. 👍🏻

  • @maxxxy910
    @maxxxy910 2 ปีที่แล้ว

    Colorama does work in default cmd but you have to use colorama.init() somewhere in your script first.

  • @ben-brady
    @ben-brady 2 ปีที่แล้ว +3

    tqdm is really good loading bar package it adjusts automatically, is performant, easy to use and provide nice infothat also includes performance optimizations so it doesn't slow down your program
    Example:
    from tqdm import tqdm
    import time
    for x in tqdm(range(100)):
    time.sleep(0.01)
    21%|█████████▍ | 21/100 [00:02

    • @misterwafflezzz
      @misterwafflezzz 2 ปีที่แล้ว +1

      Yes, stick to the stuff written in c/c++ when utlizing Python

    • @AhmedIsam
      @AhmedIsam 2 ปีที่แล้ว

      Pssst: tqdm means `progress` in Arabic, (taqadam ) in case you ever wondered.

    • @ben-brady
      @ben-brady 2 ปีที่แล้ว

      I always thought it was a bunch of random letters, thanks for gifting me with this knowledge.

  • @MAX_JVCR
    @MAX_JVCR 2 ปีที่แล้ว

    Great!!!

  • @burakbulama
    @burakbulama 2 ปีที่แล้ว

    thank you

  • @hernanalbertolaborde5889
    @hernanalbertolaborde5889 ปีที่แล้ว

    Great video, thanks. How can do the same for parallel tasks?

  • @pouyatoutounchy1238
    @pouyatoutounchy1238 29 วันที่ผ่านมา

    Thank you for the great tutorial. I have done this type of progress bar and in some cases used tqdm, which makes life much easier. However, my question is how can I show the progress in asyncio? what I mean is when you trigger the asyncio.run and it is doing the asyncio.gather to actually complete the asynchronous task, how can I show the progress of each task? something like docker which shows the progress of each image download separately.

  • @albertocaraveo7891
    @albertocaraveo7891 ปีที่แล้ว

    Hello, If I have to print multiple progress bar? How can I do it?

  • @philtoa334
    @philtoa334 2 ปีที่แล้ว

    Thx.

  • @nachoherrera
    @nachoherrera 2 ปีที่แล้ว +3

    in cmd (or windows terminal) you can go thru all subdirectories in one command
    "cd Desktop\Programming\NeuralNine\Python\Current". Also you can autocomplete subdir name with tab

  • @sankaranbaskar6165
    @sankaranbaskar6165 2 ปีที่แล้ว +1

    sir, how to stop a progress bar at a particular value ?

  • @MrT0mer
    @MrT0mer 2 ปีที่แล้ว

    Could you explain how to use and what is pyinsxtractor and uncompyle6?

  • @spprakash76
    @spprakash76 3 หลายเดือนก่อน

    Nice

  • @Victor_Marius
    @Victor_Marius 2 ปีที่แล้ว

    In windows terminal you do not need to call colorama.init()? Btw CMD supports VT sequences and coloured output with colorama.

  • @rnseby
    @rnseby 2 ปีที่แล้ว

    Hello, Get video.
    I was able to get the CMD to display the colors by using the adding the code
    colorama.init()
    at the start. And then the yellow and green popped up. Didn't even need to close the CMD window. After adding the one line and rerun the script and the colors appeared.
    Again thanks,

  • @Rejgan318
    @Rejgan318 2 ปีที่แล้ว

    def progress_bar(progress, total, symbol='█', width=100):
    print(f'{symbol * int(width * progress / total):.

  • @soshimee
    @soshimee 2 ปีที่แล้ว

    What if you have a very small terminal that wraps the progress bar? Shouldn't it fit to the terminal?

  • @TomKnudsen
    @TomKnudsen 2 ปีที่แล้ว

    Could you please make a video on how to download weather i.e. download METAR reports from different station using i.e. ICAO or IATA codes?

  • @cgpmth6449
    @cgpmth6449 2 ปีที่แล้ว

    I want the percent number to be in middle of the progress bar. How can i do it?

  • @obed818
    @obed818 2 ปีที่แล้ว +3

    Very nice thanks, actually i think you can do all that maybe in a cooler way with curses (or cursed dont remember) from standard library , color also for the terminal which has this functionality

    • @Sinke_100
      @Sinke_100 2 ปีที่แล้ว

      I managed to do the same with colorama, curses and sty, this colorama is quite fine aproach, for now i used pydroid and with each one had similar issues, i will try it on linux, curses is most complicated

    • @obed818
      @obed818 2 ปีที่แล้ว

      @@Sinke_100 ah okay nice to know, i finished reading the documentation of curse the day before this video came out, didn’t realize it was more complicated than this

    • @nameundefined6265
      @nameundefined6265 2 ปีที่แล้ว

      I did the same but using escape sequences for colors and cursor movements. So didn't need any external lib.

    • @Sinke_100
      @Sinke_100 2 ปีที่แล้ว

      How is that done?

  • @Ownedyou
    @Ownedyou 2 ปีที่แล้ว

    How would you handle a condition where process fails and the progress bar can't reach 100%?

  • @TheBeast-lu9qm
    @TheBeast-lu9qm 2 ปีที่แล้ว +2

    use tqdm for this

  • @bshsb3038
    @bshsb3038 ปีที่แล้ว

    make a full in detail tutorial about rich library

  • @arielspalter7425
    @arielspalter7425 2 ปีที่แล้ว

    This is super cool. Is there a way to used it when using a pandas function (for example read_excel) where the loop is implemented by the function and not by yourself so you cannot report progress?

    • @Ruhrpottpatriot
      @Ruhrpottpatriot 2 ปีที่แล้ว

      use tqmd. You then can use `for i in tqdm(range(10000)):` to automatically get a progress bar.

  • @spozniony5499
    @spozniony5499 2 ปีที่แล้ว

    Do you can make video about progress bars in kivy

  • @azoicxx
    @azoicxx 9 หลายเดือนก่อน

    Why do you use "
    " at the start of the print and also at the end instead of just using it just with the parameter end="
    "? Isn't it the same?

  • @BadSeymur
    @BadSeymur 2 ปีที่แล้ว

    On line 16 you dont need to make that extra calculation every time in the loop just give enumerate a starting point of one - for i, x in enumerate(numbers, 1): and you are good to go. Same is for len(numbers) you dont want to make it every loop to go and find how long is the list make a var before the loop and use that.Thats all extra calculation that you dont want to do on every loop in real life and slow your code...

  • @melvilli69
    @melvilli69 2 ปีที่แล้ว

    Nice intro.

  • @nestorospina
    @nestorospina 2 ปีที่แล้ว +4

    What is the difference of this program with the library tqrm ??

    • @SirFloIII
      @SirFloIII 2 ปีที่แล้ว +1

      tqdm is just way better as you don't have to do any housekeeping yourself, just wrap the interator

  • @leonardopangaio5574
    @leonardopangaio5574 2 ปีที่แล้ว

    First of all, thx about the video.
    But i need some help to make a function that can display more than 1 progress bar, to use in more than 1 loop and that could be shown even during the program is printing in the console.
    Could you make a new video showing how to update this function?

  • @rusty989
    @rusty989 2 ปีที่แล้ว +1

    Why are you not using TQDM

  • @Thauan7020
    @Thauan7020 หลายเดือนก่อน

    nice, muito bonito ❣❤‍🩹

  • @m4gg197
    @m4gg197 2 ปีที่แล้ว

    fun fact: you can run it in pycharm if you choose to emulate the command prompt in your interpreter configuration

  • @tihon4979
    @tihon4979 2 ปีที่แล้ว

    Nice! But how about awesome python library - rich? There is a progress bar too.

  • @Smaxy_
    @Smaxy_ 2 ปีที่แล้ว +2

    You can also use the tqdm library on python for easier progress bars

    • @avo_k
      @avo_k 2 ปีที่แล้ว

      this should be top com, no need to reinvent the wheel

    • @breazfreind402
      @breazfreind402 2 ปีที่แล้ว

      but it is really educational and informative , this is one of the rare videos showing how to make progress bars. Why should he "reinvent the wheel" of trying to produce the same videos?

  • @renegroulx7029
    @renegroulx7029 2 ปีที่แล้ว

    Everytime I tried pip install nothing happens. Syntax error: invalid syntax.

  • @kharthigeyan
    @kharthigeyan 2 ปีที่แล้ว +4

    why not simply use tqdm?.

    • @nameundefined6265
      @nameundefined6265 2 ปีที่แล้ว +3

      You may not always want to be dependent on external libs. Or you might want to do it yourself because you need a simple progress bar.

    • @leoliu2079
      @leoliu2079 2 ปีที่แล้ว

      @@nameundefined6265 then why use pandas? Just use list

  • @Havirgem
    @Havirgem 2 ปีที่แล้ว

    tqdm

  • @mubelotix
    @mubelotix 2 ปีที่แล้ว

    Wait you are using windaube ?

  • @m4rt_
    @m4rt_ 2 ปีที่แล้ว

    1:55 I haven't seen that been used a lot, I usually do:
    (100 / total) * progress

  • @moe__________
    @moe__________ 2 ปีที่แล้ว

    What IDE software do you use

  • @ed223-p5g
    @ed223-p5g 2 ปีที่แล้ว

    does it work on ipython

  • @swizzler
    @swizzler 2 ปีที่แล้ว

    This is odd, everything else I've read said that before you can implement progress bars, you have to make your python program multi-threaded and make sure to dedicate your background process to another thread, but you didn't do that, is that incorrect information?

  • @wajahatirfan8908
    @wajahatirfan8908 2 ปีที่แล้ว

    👍

  • @devbites77
    @devbites77 2 ปีที่แล้ว

    For me, it is displaying the bar multiple times; not once. Anyway to solve this?

    • @jyvben1520
      @jyvben1520 2 ปีที่แล้ว

      your terminal window is not wide enough

  • @simplegametutorials1341
    @simplegametutorials1341 ปีที่แล้ว

    Rich Library => does the same but quickly

  • @andresantana9148
    @andresantana9148 2 ปีที่แล้ว

    I wish I could give 1000s of likes.
    Thank you very much.

  • @leoliu2079
    @leoliu2079 2 ปีที่แล้ว

    tqdm?

  • @circuit6896
    @circuit6896 2 ปีที่แล้ว

    It's giving me a Syntax error with this:
    "numbers [x * 5 for x in range(2000, 3000)]"
    Copied the code I think pretty much exactly but could be wrong, here's the code:
    import math
    def progress_bar(progress, total):
    precent = 100 * (progress / float(total))
    bar = ' ' * int(percent) + '-' * (100 - int(percent))
    print(f"
    |{bar}| {percent:.2f}%", end = "
    ")

    numbers [x * 5 for x in range(2000, 3000)]
    results = []
    progress_bar(0, len(numbers))
    for i, x in enumerate(numbers):
    results.append(math.factorial(x))
    progress_bar(i + 1, len(numbers))

    • @breazfreind402
      @breazfreind402 2 ปีที่แล้ว +1

      yeah you are missing an equal sign between numbers and "[x*5...]".

    • @circuit6896
      @circuit6896 2 ปีที่แล้ว

      Thank you both, if i get around to finding the file again ill update how it went

  • @ykartd
    @ykartd 2 ปีที่แล้ว

    I see the bar is printed in every loop... why does a new bar print over a previous one?

    • @Victor_Marius
      @Victor_Marius 2 ปีที่แล้ว

      because he uses the cariage return character "
      "

  • @21Mayhem
    @21Mayhem 2 ปีที่แล้ว

    u look like the guy from hxh that fights with coins

  • @falconash
    @falconash 2 ปีที่แล้ว

    How in the hell did i reach here...
    Fav anyways, who knows in the future.

  • @ruthvikas
    @ruthvikas 2 ปีที่แล้ว

    Well the colours didn't work on cmd but worked in PyCharm terminal for me...

    • @Victor_Marius
      @Victor_Marius 2 ปีที่แล้ว

      in cmd use colorama.init() just once after the import (or before the first color printing)

  • @Pyth0g
    @Pyth0g หลายเดือนก่อน

    Great vid, but why not just use ansi color codes

  • @hell0kitje
    @hell0kitje 2 ปีที่แล้ว +2

    next time code whole universe in phyton ;)

  • @finsflexin
    @finsflexin 2 ปีที่แล้ว

    It would be soooo much faster if you just used the user’s volume settings as the progress bar.

    • @finsflexin
      @finsflexin 2 ปีที่แล้ว

      @Jamie 🏳️‍🌈 it’s flawless

  • @THlS_IS_FRANK
    @THlS_IS_FRANK ปีที่แล้ว

    SOURCE CODE PLS

  • @0znzw
    @0znzw 2 ปีที่แล้ว

    ▨▬▮ squares :)

  • @JNET_Reloaded
    @JNET_Reloaded 2 ปีที่แล้ว +1

    ok so wheres the link to the code?

  • @klintkrossa6885
    @klintkrossa6885 2 ปีที่แล้ว

    chr(9608)

  • @nano_redstone
    @nano_redstone 2 ปีที่แล้ว

    Or you could just use the tqdm package 🤷

  • @wuhlheide
    @wuhlheide 2 ปีที่แล้ว

    My colors do not change

  • @Wongt8
    @Wongt8 2 ปีที่แล้ว

    from tqdm import tqdm

  • @subhankarchakraborty3866
    @subhankarchakraborty3866 2 ปีที่แล้ว

    Hello Nuralnine, please make a video on "How to automate Gmail using Gmail API". PLEASE 🙏

  • @thanatosor
    @thanatosor 2 ปีที่แล้ว

    now try that on Rust

  • @kstudios4046
    @kstudios4046 2 ปีที่แล้ว

    bruh like dude why this brings
    ZeroDivisionError
    B R U H