python - পাইথন ভাষায় ডিকশনারি কেন ব্যবহার করা হয়




স্ট্যাটাস বার এবং শতাংশ প্রিন্ট আউট পাইথন (9)

@ মার্ক-রুশকফ উত্তর ব্যবহার করে, আমি একটি সহজ পদ্ধতির কাজ করেছি, সিইএস লাইব্রেরিকে কল করার প্রয়োজন নেই। এটি পাইথন 3 এর সাথে কাজ করে। উইন্ডোজগুলিতে পরীক্ষা করা হয়েছে:

from time import sleep
for i in range(21):
    # the exact output you're looking for:
    print ("\r[%-20s] %d%%" % ('='*i, 5*i), end='')
    sleep(0.25)

নীচের মত একটি স্ট্যাটাস বার বাস্তবায়ন:

[==========                ]  45%
[================          ]  60%
[==========================] 100%

আমি stdout এ মুদ্রণ করতে চাই, এবং এটি রিফ্রেশ রাখা, অন্য লাইন মুদ্রণ না। কিভাবে এই কাজ করতে?


PyProg চেষ্টা করুন। PyProg সুপার কাস্টমাইজযোগ্য অগ্রগতি সূচক & বার তৈরি করতে পাইথন জন্য একটি ওপেন সোর্স লাইব্রেরি।

এটি বর্তমানে সংস্করণ 1.0.2 এ আছে; এটি গিথুব-এ হোস্ট করা হয় এবং পাইপিতে পাওয়া যায় (নীচের লিঙ্কগুলি)। এটি পাইথন 3 এবং 2 এর সাথে সামঞ্জস্যপূর্ণ এবং এটি QT কনসোলের সাথেও ব্যবহার করা যেতে পারে।

এটা ব্যবহার করা সত্যিই সহজ। নিম্নলিখিত কোডটি:

import pyprog
from time import sleep

# Create Object
prog = pyprog.ProgressBar(" ", " ", total=34, bar_length=26, complete_symbol="=", not_complete_symbol=" ", wrap_bar_prefix=" [", wrap_bar_suffix="] ", progress_explain="", progress_loc=pyprog.ProgressBar.PROGRESS_LOC_END)
# Update Progress Bar
prog.update()

for i in range(34):
    # Do something
    sleep(0.1)
    # Set current status
    prog.set_stat(i + 1)
    # Update Progress Bar again
    prog.update()

# Make the Progress Bar final
prog.end()

আপনি চান কি ঠিক উত্পাদন হবে (এমনকি বার দৈর্ঘ্য!):

[===========               ] 45%
[===============           ] 60%
[==========================] 100%

অগ্রগতি বারটি কাস্টমাইজ করতে আরো বিকল্পের জন্য, এই ওয়েবসাইটের গীথুব পৃষ্ঠাটিতে যান।

আমি আসলে PyProg তৈরি কারণ আমি একটি সহজ কিন্তু সুপার কাস্টমাইজযোগ্য অগ্রগতি বার লাইব্রেরি প্রয়োজন। আপনি সহজেই এটি ইনস্টল করতে পারেন: pip install pyprog

PyProg Github: https://github.com/Bill13579/pyprog
পাইপিআই: https://pypi.python.org/pypi/pyprog/


আপনি \r ( ক্যারিয়ার রিটার্ন ) ব্যবহার করতে পারেন। ডেমো:

import sys
total = 10000000
point = total / 100
increment = total / 20
for i in xrange(total):
    if(i % (5 * point) == 0):
        sys.stdout.write("\r[" + "=" * (i / increment) +  " " * ((total - i)/ increment) + "]" +  str(i / point) + "%")
        sys.stdout.flush()

আপনি যদি একটি কমান্ড লাইন ইন্টারফেস বিকাশ করছেন, তবে আমি আপনাকে খুব সুন্দর বলে click করার জন্য একটি প্রস্তাব দিচ্ছি:

import click
import time

for filename in range(3):
    with click.progressbar(range(100), fill_char='=', empty_char=' ') as bar:
        for user in bar:
            time.sleep(0.01)

এখানে আপনি আউটপুট পেতে:

$ python test.py
  [====================================]  100%
  [====================================]  100%
  [=========                           ]   27%

উপরোক্ত উত্তরগুলির উপর ভিত্তি করে এবং CLI অগ্রগতি বার সম্পর্কে অন্যান্য অনুরূপ প্রশ্নগুলির ভিত্তিতে, আমার মনে হয় আমি তাদের সকলকে সাধারণ সাধারণ উত্তর পেয়েছি। এটি https://.com/a/15860757/2254146

এখানে ফাংশন একটি কপি, কিন্তু আপনার শৈলী মাপসই পরিবর্তন করা হয়েছে:

import time, sys

# update_progress() : Displays or updates a console progress bar
## Accepts a float between 0 and 1. Any int will be converted to a float.
## A value under 0 represents a 'halt'.
## A value at 1 or bigger represents 100%
def update_progress(progress):
    barLength = 20 # Modify this to change the length of the progress bar
    status = ""
    if isinstance(progress, int):
        progress = float(progress)
    if not isinstance(progress, float):
        progress = 0
        status = "error: progress var must be float\r\n"
    if progress < 0:
        progress = 0
        status = "Halt...\r\n"
    if progress >= 1:
        progress = 1
        status = "Done...\r\n"
    block = int(round(barLength*progress))
    text = "\rPercent: [{0}] {1}% {2}".format( "="*block + " "*(barLength-block), progress*100, status)
    sys.stdout.write(text)
    sys.stdout.flush()

দেখতে

শতাংশ: [===================== 99.0%


একটি পাইথন মডিউল রয়েছে যা আপনি PyPI থেকে পেতে পারেন যা progressbar বলা হয় যা এই কার্যকারিতা প্রয়োগ করে। যদি আপনি একটি নির্ভরতা যোগ করার কথা মনে করেন না, এটি একটি ভাল সমাধান। অন্যথায়, অন্য উত্তর এক সঙ্গে যান।

এটি ব্যবহার করার একটি সহজ উদাহরণ:

import progressbar
from time import sleep
bar = progressbar.ProgressBar(maxval=20, \
    widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()])
bar.start()
for i in xrange(20):
    bar.update(i+1)
    sleep(0.1)
bar.finish()

এটি ইনস্টল করার জন্য, আপনি easy_install progressbar ব্যবহার করতে পারেন, অথবা pip install progressbar পছন্দ করলে pip install progressbar


এখানে এবং অন্য কোথাও উত্তরগুলির উপর ভিত্তি করে, আমি এই সহজ ফাংশনটি লিখেছি যা একটি অগ্রগতি বার এবং শেষ / আনুমানিক অবশিষ্ট সময় প্রদর্শন করে। অধিকাংশ ইউনিক্স ভিত্তিক মেশিনে কাজ করা উচিত।

import time
import sys

percent = 50.0
start = time.time()
draw_progress_bar(percent, start)


def draw_progress_bar(percent, start, barLen=20):
sys.stdout.write("\r")
progress = ""
for i in range(barLen):
    if i < int(barLen * percent):
        progress += "="
    else:
        progress += " "

elapsedTime = time.time() - start;
estimatedRemaining = int(elapsedTime * (1.0/percent) - elapsedTime)

if (percent == 1.0):
    sys.stdout.write("[ %s ] %.1f%% Elapsed: %im %02is ETA: Done!\n" % 
        (progress, percent * 100, int(elapsedTime)/60, int(elapsedTime)%60))
    sys.stdout.flush()
    return
else:
    sys.stdout.write("[ %s ] %.1f%% Elapsed: %im %02is ETA: %im%02is " % 
        (progress, percent * 100, int(elapsedTime)/60, int(elapsedTime)%60,
         estimatedRemaining/60, estimatedRemaining%60))
    sys.stdout.flush()
    return

এটি একটি লুপ সঙ্গে ব্যবহার করা যেতে পারে বেশ সহজ পদ্ধতি।

#!/usr/bin/python
for i in range(100001):
    s =  ((i/5000)*'#')+str(i)+(' %')
    print ('\r'+s),

'\r' চরিত্র (ক্যারিয়ার রিটার্ন) কার্সারটিকে লাইনের শুরুতে পুনরায় সেট করে এবং আপনাকে পূর্বে লাইনটিতে কী লিখতে দেয় তা লিখতে দেয়।

from time import sleep
import sys

for i in range(21):
    sys.stdout.write('\r')
    # the exact output you're looking for:
    sys.stdout.write("[%-20s] %d%%" % ('='*i, 5*i))
    sys.stdout.flush()
    sleep(0.25)

আমি 100% নিশ্চিত নই যদি এটি সমস্ত সিস্টেমে সম্পূর্ণরূপে পোর্টেবল হয় তবে এটি অন্তত লিনাক্স এবং ওএসএক্সে কাজ করে।





python