Hướng dẫn tqdm list python - tqdm list python

Tôi không thể thấy thanh tiến trình tqdm khi tôi sử dụng mã này để lặp lại tệp đã mở của mình:

        with open(file_path, 'r') as f:
        for i, line in enumerate(tqdm(f)):
            if i >= start and i <= end:
                print("line #: %s" % i)
                for i in tqdm(range(0, line_size, batch_size)):
                    # pause if find a file naed pause at the currend dir
                    re_batch = {}
                    for j in range(batch_size):
                        re_batch[j] = re.search(line, last_span)

cách phù hợp để sử dụng tqdm ở đây là gì?

  • python
  • progress-bar
  • enumerate
  • tqdm

33 hữu ích 2 bình luận 38k xem chia sẻ 2 bình luận 38k xem chia sẻ

answer

41

Hướng dẫn tqdm list python - tqdm list python

Bạn đang đi đúng hướng. Bạn đang sử dụng tqdm đúng cách, nhưng dừng việc in từng dòng bên trong vòng lặp khi sử dụng tqdm. Bạn cũng sẽ muốn sử dụng tqdm trên vòng lặp for đầu tiên của mình chứ không phải trên những người khác, như vậy:

with open(file_path, 'r') as f:
    for i, line in enumerate(tqdm(f)):
        if i >= start and i <= end:
            for i in range(0, line_size, batch_size):
                # pause if find a file naed pause at the currend dir
                re_batch = {}
                for j in range(batch_size):
                    re_batch[j] = re.search(line, last_span)

Một số lưu ý khi sử dụng enumerate và cách sử dụng nó trong tqdm tại đây .

41 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ

answer

16

Bạn đang đi đúng hướng. Bạn đang sử dụng tqdm đúng cách, nhưng dừng việc in từng dòng bên trong vòng lặp khi sử dụng tqdm. Bạn cũng sẽ muốn sử dụng tqdm trên vòng lặp for đầu tiên của mình chứ không phải trên những người khác, như vậy:tqdm không hiển thị thanh tiến trình, vì số dòng trong đối tượng tệp chưa được cung cấp.

Một số lưu ý khi sử dụng enumerate và cách sử dụng nó trong tqdm tại đây .

41 hữu ích 0 bình luận chia sẻ

from tqdm import tqdm

num_lines = sum(1 for line in open('myfile.txt','r'))
with open('myfile.txt','r') as f:
    for line in tqdm(f, total=num_lines):
        print(line)

Tôi cũng gặp phải vấn đề này - tqdm không hiển thị thanh tiến trình, vì số dòng trong đối tượng tệp chưa được cung cấp. 0 bình luận chia sẻ

answer

6

Bạn đang đi đúng hướng. Bạn đang sử dụng tqdm đúng cách, nhưng dừng việc in từng dòng bên trong vòng lặp khi sử dụng tqdm. Bạn cũng sẽ muốn sử dụng tqdm trên vòng lặp for đầu tiên của mình chứ không phải trên những người khác, như vậy:

with tqdm(total=Path(filepath).stat().st_size) as pbar:
    with bz2.open(filepath) as fin:
        for line in fin:
            pbar.update(fin.tell() - pbar.n)
    
    # used this to figure out the attributes of the pbar instance
    # print(vars(pbar))

Một số lưu ý khi sử dụng enumerate và cách sử dụng nó trong tqdm tại đây .

41 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ

answer

0

Bạn đang đi đúng hướng. Bạn đang sử dụng tqdm đúng cách, nhưng dừng việc in từng dòng bên trong vòng lặp khi sử dụng tqdm. Bạn cũng sẽ muốn sử dụng tqdm trên vòng lặp for đầu tiên của mình chứ không phải trên những người khác, như vậy:

Một số lưu ý khi sử dụng enumerate và cách sử dụng nó trong tqdm tại đây .

41 hữu ích 0 bình luận chia sẻ

Tôi cũng gặp phải vấn đề này - tqdm không hiển thị thanh tiến trình, vì số dòng trong đối tượng tệp chưa được cung cấp. 0 bình luận chia sẻ

Các forvòng lặp sẽ lặp qua đường dây, đọc đến khi ký tự xuống dòng tiếp theo là gặp phải.

Để thêm thanh tiến trình vào tqdm, trước tiên bạn cần quét tệp và đếm số dòng, sau đó chuyển nó đến tqdm dưới dạngtotal

16 hữu ích 0 bình luận chia sẻ

from tqdm import tqdm
import os

file_size = os.path.getsize(filename)
lines_read= []
pbar = tqdm.tqdm(total=file_zize, unit="MB")
with open(filename, 'r', encoding='UTF-8') as file:
    while (line := file.readline()):
        lines_read.append(line)
        pbar.update(s.getsizeof(line)-sys.getsizeof('\n'))
pbar.close()

Tôi đang cố gắng làm điều tương tự trên một tệp chứa tất cả các bài viết trên Wikipedia. Vì vậy, tôi không muốn đếm tổng số dòng trước khi bắt đầu xử lý. Ngoài ra, nó là một tệp nén bz2, vì vậy len của dòng được giải nén sẽ đánh giá quá cao số byte được đọc trong lần lặp đó, vì vậy ...

EDIT:

Cảm ơn Yohan Kuanke vì câu trả lời đã xóa của bạn. Nếu người kiểm duyệt phục hồi nó, bạn có thể đóng cũi của tôi.

6 hữu ích 0 bình luận chia sẻ

Trong trường hợp đọc tệp với readlines(), bạn có thể sử dụng như sau:

from tqdm import tqdm
with open(filename) as f:
    sentences = tqdm(f.readlines(),unit='MB')

những

with open(file_path, 'r') as f:
    for i, line in enumerate(tqdm(f)):
        if i >= start and i <= end:
            for i in range(0, line_size, batch_size):
                # pause if find a file naed pause at the currend dir
                re_batch = {}
                for j in range(batch_size):
                    re_batch[j] = re.search(line, last_span)
0có thể được thay đổi để 'B' hoặc 'KB' hoặc 'GB' cho phù hợp. https://bugs.python.org/issue11114