0

我只想从带有 Python3 进度条的 URL 下载。我有 atm 的代码不会停留在一行,而是打印数百行新行。有没有办法限制它,使其看起来更干净,并且可能改变设计?

class TqdmUpTo(tqdm):
"""Provides `update_to(n)` which uses `tqdm.update(delta_n)`."""
def update_to(self, b=1, bsize=10, tsize=None):
    """
    b  : int, optional
        Number of blocks transferred so far [default: 1].
    bsize  : int, optional
        Size of each block (in tqdm units) [default: 1].
    tsize  : int, optional
        Total size (in tqdm units). If [default: None] remains unchanged.
    """
    if tsize is not None:
        self.total = tsize
    self.update(b * bsize - self.n)  # will also set self.n = b * bsize

def downloader(urllink, filename):
    with TqdmUpTo(unit='B', unit_scale=True, miniters=1,
        desc=urllink.split('/')[-1]) as t:  # all optional kwargs
        urllib.request.urlretrieve(urllink, filename=filename, reporthook=t.update_to, data=None)

这样的事情将是理想的。

100%|███████████████████████████████▉| 8014/8014 [01:37<00:00, 82.29files/s](来源:https ://github.com/tqdm/tqdm )

如果可能的话,希望有人可以帮助我......

提前致谢 :)

4

2 回答 2

1

tqdm用于\r每次迭代重写该行,但不同的控制台环境解释\r不同。

只是从我这里得到的东西的一点点实验中,

# IDLE (both shell and from a file)
>>> print("11111\r222")
11111

222

# macOS default terminal
python3
>>> print("11111\r222")
22211

# macOS default terminal
ipython
In [1]: print("11111\r222")
22211

# Pycharm Python Console (ipython)
In [1]: print("11111\r222")
11111
222

# Pycharm from inside a file
print("11111\r222") # Outputs just `222`

从项目的自述文件(重点是我的)中,

tqdm 不需要任何依赖项(甚至不需要诅咒!),只需要 Python 和支持回车符 \r 和换行符 \n 控制字符的环境

并且,在“常见问题”下:

一般控制台:需要支持回车(CR、\r)。

因此,请尝试切换到其他控制台。


看起来您还想更改栏的设计(或只是颜色?)。库似乎不支持这一点,因此您必须查看源代码并对其进行编辑,或者尝试在 Python 中使用不同的进度条实现。

于 2017-11-02T16:02:44.193 回答
0

好的,我自己解决了,我从没想过会这么容易:d

答案称为wget

import wget
url = "https://www.python.org/static/img/python-logo.png"

filename = "logo.png"
wget.download(url, filename)

或者如果我想使用原始文件名:

import wget
url = "https://www.python.org/static/img/python-logo.png"

filename = wget.download(url, filename)

现在我只需要弄清楚如何更改设计,但这只是可选的,因为我喜欢它现在的设计。

于 2017-11-02T16:18:02.463 回答