বৃহস্পতি নোটবুকে tqdm বারবার নতুন অগ্রগতি বারগুলি মুদ্রণ করে


138

আমি tqdmএকটি স্ক্রিপ্টে অগ্রগতি মুদ্রণের জন্য ব্যবহার করছি আমি একটি বৃহত্তর নোটবুকে চালাচ্ছি। আমি কনসোলে সমস্ত বার্তা মুদ্রণ করছি tqdm.write()। যাইহোক, এটি এখনও আমাকে এর মতো স্কাই আউটপুট দেয়:

এখানে চিত্র বর্ণনা লিখুন

এটি হ'ল প্রতিবার একটি নতুন লাইন প্রিন্ট করতে হবে, পরের লাইনে একটি নতুন অগ্রগতি বারটি মুদ্রণ করা হবে। টার্মিনালের মাধ্যমে স্ক্রিপ্টটি চালালে এটি ঘটে না। আমি কীভাবে এটি সমাধান করতে পারি?


প্রকৃতপক্ষে, যখন আমি ব্যবহার করি, তখন আমি সাধারণগুলিও tqdm_notebookকরতে পারি print, এবং এটি অগ্রগতি বারকে প্রভাবিত করে না।
টমাসজ গ্যান্ডোর

একটি বিকল্প ব্যবহার করতে হয় progressbar stackoverflow.com/questions/3160699/python-progress-bar/...
eusoubrasileiro

উত্তর:


216

tqdm.notebook.tqdmপরিবর্তে এখানেtqdm বর্ণিত হিসাবে ব্যবহার করার চেষ্টা করুন

এটি আপনার আমদানিকে এতে পরিবর্তন করার মতো সহজ হতে পারে:

from tqdm.notebook import tqdm

শুভকামনা!

সম্পাদনা: পরীক্ষার পরে, মনে tqdmহয় জপিটার নোটবুকের 'টেক্সট মোডে' আসলে কাজ করে। এটি বলা শক্ত কারণ আপনি কোনও ন্যূনতম উদাহরণ সরবরাহ করেন নি , তবে দেখে মনে হচ্ছে আপনার সমস্যাটি প্রতিটি পুনরাবৃত্তির মুদ্রণ বিবরণের কারণে হয়েছে। মুদ্রণ বিবৃতিটি প্রতিটি স্ট্যাটাস বার আপডেটের মধ্যে একটি সংখ্যার (89 0.89) আউটপুট করছে, যা আউটপুট গোলমাল করছে। মুদ্রণ বিবৃতি অপসারণ করার চেষ্টা করুন।


2
আমি কোনও print()বিবৃতি ব্যবহার করি নি , ব্যবহার করেছি tqdm.write()। তবে tqdm_notebookভাল ফল দেয়। ধন্যবাদ:)
রোহান সাক্সেনা

আপনি কি জানেন যে এটি পাইথন 3.6 সমর্থন করে? আমি এর সাথে ভাগ্য পাইনি
জন

1
আপনি কি ত্রুটি পাচ্ছেন? এটা আমার জন্য ভালই কাজ করে। এত অল্প তথ্যের সাহায্যে অসম্ভব ... আপনি কি জুনিয়রে আইপিউজেড সক্ষম করেছেন ? আপনি কি ঠিক tqdmচেয়ে সরল আছে tqdm_notebook? এটি পাইথন 3.6 এবং জুপিটার 1.0.0 এর সাথে ভাল কাজ করে।
অস্কারবান্সন

tqdm_notebook থেকে tqdm 4.19.4 পাইথন ৩.6, জুপিটার নোটবুক ৫.০.০ এবং আইপিউজেটস .0.০.৩ এ আমার জন্য কাজ করছে।
ম্যাট ক্লিনস্মিথ

2
@ বাগম্যানট 123 ভাল ক্যাচ, ফিক্সড।
Czyzby

39

এটি সেই ক্ষেত্রে বিকল্প উত্তর যেখানে tqdm_notebook আপনার পক্ষে কাজ করে না।

নিম্নলিখিত উদাহরণ দেওয়া:

from time import sleep
from tqdm import tqdm

values = range(3)
with tqdm(total=len(values)) as pbar:
    for i in values:
        pbar.write('processed: %d' %i)
        pbar.update(1)
        sleep(1)

আউটপুটটি এমন কিছু দেখায় (অগ্রগতিটি লাল দেখায়):

  0%|          | 0/3 [00:00<?, ?it/s]
processed: 1
 67%|██████▋   | 2/3 [00:01<00:00,  1.99it/s]
processed: 2
100%|██████████| 3/3 [00:02<00:00,  1.53it/s]
processed: 3

সমস্যাটি হ'ল স্টডআউট এবং স্ট্ডার থেকে আউটপুটটি নতুন লাইনের শর্তে অবিচ্ছিন্নভাবে এবং পৃথকভাবে প্রক্রিয়াজাত করা হয়।

যদি বলি যে জপিটার প্রথম লাইনে স্ট্যাডারে পাবে এবং তারপরে স্টাডআউটে "প্রক্রিয়াজাত" আউটপুট। তারপরে একবার অগ্রগতি আপডেট করার জন্য স্ট্যাডারে একটি আউটপুট পেলে এটি ফিরে যাবে না এবং প্রথম লাইনটি আপডেট করবে না কারণ এটি কেবল শেষ লাইনটি আপডেট করবে। পরিবর্তে এটি একটি নতুন লাইন লিখতে হবে।

কর্মসংস্থান 1, stdout লেখার

এর পরিবর্তে একটি স্ট্যান্ডআউটে উভয়কে আউটপুট দেওয়া হবে:

import sys
from time import sleep
from tqdm import tqdm

values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
    for i in values:
        pbar.write('processed: %d' % (1 + i))
        pbar.update(1)
        sleep(1)

আউটপুট পরিবর্তিত হবে (আর লাল হবে না):

processed: 1   | 0/3 [00:00<?, ?it/s]
processed: 2   | 0/3 [00:00<?, ?it/s]
processed: 3   | 2/3 [00:01<00:00,  1.99it/s]
100%|██████████| 3/3 [00:02<00:00,  1.53it/s]

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

import sys
from time import sleep
from tqdm import tqdm

values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
    for i in values:
        pbar.write('processed: %d%s' % (1 + i, ' ' * 50))
        pbar.update(1)
        sleep(1)

যা আমাদের দেয়:

processed: 1                                                  
processed: 2                                                  
processed: 3                                                  
100%|██████████| 3/3 [00:02<00:00,  1.53it/s]

কার্যবিধি 2, পরিবর্তে বর্ণনা সেট করুন

এটি সাধারণত দুটি আউটপুট না পেয়ে আরও সরাসরি এগিয়ে যেতে পারে তবে পরিবর্তে বর্ণনাটি আপডেট করতে পারে, যেমন:

import sys
from time import sleep
from tqdm import tqdm

values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
    for i in values:
        pbar.set_description('processed: %d' % (1 + i))
        pbar.update(1)
        sleep(1)

আউটপুট সহ (প্রক্রিয়া চলাকালীন বিবরণ আপডেট হয়েছে):

processed: 3: 100%|██████████| 3/3 [00:02<00:00,  1.53it/s]

উপসংহার

আপনি বেশিরভাগ ক্ষেত্রে সাদামাটা tqdm দিয়ে কাজ করতে পারেন। তবে যদি tqdm_notebook আপনার জন্য কাজ করে তবে কেবল এটি ব্যবহার করুন (তবে আপনি সম্ভবত এটি খুব বেশি পড়তে পারবেন না)।



এটি এখন পর্যন্ত সেরা উত্তর।
রাফায়

18

বেশিরভাগ উত্তর এখন পুরানো। আপনি সঠিকভাবে tqdm আমদানি করা ভাল ter

from tqdm import tqdm_notebook as tqdm

এখানে চিত্র বর্ণনা লিখুন


7
এটি আবার পরিবর্তিত হয়েছিল:TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0 Please use tqdm.notebook.tqdm instead of tqdm.tqdm_notebook
অপরাহ্ন

10

যদি এখানে অন্যান্য টিপস কাজ না করে এবং - ঠিক আমার মতো - আপনি pandasইন্টিগ্রেশনটি ব্যবহার করছেন progress_apply, আপনি tqdmএটিকে পরিচালনা করতে পারেন :

from tqdm.autonotebook import tqdm
tqdm.pandas()

df.progress_apply(row_function, axis=1)

এখানে মূল পয়েন্ট tqdm.autonotebookমডিউল মধ্যে নিহিত । হিসাবে বিবৃত IPython নোটবুক ব্যবহারের জন্য তাদের নির্দেশাবলী , এই তোলে tqdmপ্রগতি দণ্ড Jupyter নোটবুক ব্যবহৃত বিন্যাস ও Jupyter কনসোল মধ্যে নির্বাচন - একটি কারণ এখনও আমার দিকে আরও তদন্ত উদাসীন জন্য, নির্দিষ্ট বিন্যাস দ্বারা নির্বাচিত tqdm.autonotebookসহজে মধ্যে কাজ pandas, যখন অন্যদের করিনি T ', জন্য progress_applyবিশেষভাবে।


9

অস্কারব্রান্সনের উত্তরটি সম্পূর্ণ করতে: কোথা থেকে এটি চালানো হচ্ছে তার উপর নির্ভর করে অগ্রগতি বারের কনসোল বা নোটবুক সংস্করণগুলি স্বয়ংক্রিয়ভাবে নেওয়া সম্ভব:

from tqdm.autonotebook import tqdm

আরও তথ্য এখানে পাওয়া যাবে


8

উপরের কোনওটিই আমার পক্ষে কাজ করে না। আমি দেখতে পেয়েছি যে এই সমস্যাটি ত্রুটির পরে নিম্নলিখিত ধরণের হয়ে চলছে (এটি ব্যাকগ্রাউন্ডে অগ্রগতি বারগুলির সমস্ত দৃষ্টান্ত পরিষ্কার করে):

from tqdm import tqdm

# blah blah your code errored

tqdm._instances.clear()

1
ধন্যবাদ! তবে এটি ছুঁড়ে দেয় এবং ত্রুটি যদি কোনও দৃষ্টান্ত উপস্থিত না থাকে। এখনও এটি স্ক্রিপ্ট এবং হাইড্রোজেন আইডিই ব্যবহার করতে চান। এখানে আমার কোড। try: # Avoids problem on notebooks / Hydrogen IDE tqdm.tqdm._instances.clear() except Exception: pass
জ্যাক পিটার্স

হ্যাঁ, কোনও উদাহরণ উপস্থিত না থাকলে এটি ব্যতিক্রম ছুঁড়ে ফেলবে। আপনার চেষ্টা ছাড়া উপায় ছাড়া সমস্যা আছে?
জেমস মালিকরা


0

উইন্ডোতে রয়েছেন এমন প্রত্যেকের জন্য এবং এখানে বর্ণিত সমাধানগুলির সাথে সদৃশ বারগুলির ইস্যুটি সমাধান করতে পারেনি। টিকিডিএমের জানা সমস্যাগুলিরcolorama মধ্যে যেমনটি বলা হয়েছে আমাকে প্যাকেজটি ইনস্টল করতে হয়েছিল।

pip install colorama

এই উদাহরণ দিয়ে চেষ্টা করুন:

from tqdm import tqdm
from time import sleep

for _ in tqdm(range(5), "All", ncols = 80, position = 0):
    for _ in tqdm(range(100), "Sub", ncols = 80, position = 1, leave = False):
        sleep(0.01)

যা এরকম কিছু তৈরি করবে:

All:  60%|████████████████████████                | 3/5 [00:03<00:02,  1.02s/it]
Sub:  50%|██████████████████▌                  | 50/100 [00:00<00:00, 97.88it/s]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.