Python 计算控制台中的URL而不是进度条中的URL

Python 计算控制台中的URL而不是进度条中的URL,python,command-line-interface,Python,Command Line Interface,我目前运行一个进度条作为web刮板的一部分,但它似乎是两者兼而有之 不准确的 B慢一点看这个过程是什么 with click.progressbar(range(1000000)) as bar: for i in bar: pass 是否有我能够阅读的文章/培训,以便更好地了解控制台的打印进度 实际上,我希望程序扫描列表中的url,然后在列表中迭代时打印进度,类似于 扫描URL 1/30 扫描URL 2/30 扫描URL 3/30 如果可能的话,保持一致,但不是必要的

我目前运行一个进度条作为web刮板的一部分,但它似乎是两者兼而有之

不准确的 B慢一点看这个过程是什么

with click.progressbar(range(1000000)) as bar:
    for i in bar:
        pass
是否有我能够阅读的文章/培训,以便更好地了解控制台的打印进度

实际上,我希望程序扫描列表中的url,然后在列表中迭代时打印进度,类似于

扫描URL 1/30

扫描URL 2/30

扫描URL 3/30

如果可能的话,保持一致,但不是必要的

代码如下-如果有人可以协助培训或阅读,将不胜感激

import requests
import csv
from lxml import html
URL_LIST = [
"https://www.realestate.com.au/property/1-1-goldsmith-st-elwood-vic-3184",
"https://www.realestate.com.au/property/1-10-albion-rd-glen-iris-vic-3146",
"https://www.realestate.com.au/property/1-109-sydney-rd-manly-nsw-2095",
"https://www.realestate.com.au/property/1-1110-glen-huntly-rd-glen-huntly-vic-3163",]

with open('test.csv', 'wb') as csv_file:
    writer = csv.writer(csv_file)

    for index, url in enumerate(URL_LIST):
        page = requests.get(url)
        print 'scanning url....'

        if text2search in page.text:
            tree = html.fromstring(page.content)

            (title,) = (x.text_content() for x in tree.xpath('//title'))
            (price,) = (x.text_content() for x in tree.xpath('//div[@class="property-value__price"]'))
            (sold,) = (x.text_content().strip() for x in tree.xpath('//p[@class="property-value__agent"]'))
            writer.writerow([title, price, sold])
是一个强大的进度条库。它让你做这样的事情

import tqdm
t = tqdm.tqdm(list('abcdefg'))
for i in t:
    import time
    time.sleep(1)
    t.set_postfix(url=i)
进度条输出为:

 86%|██████████████████████████▏    | 6/7 [00:06<00:01,  1.00s/it, url=f]

如果您想打印进度条以外的指示器来显示您的进度,最简单的方法可能是定期打印

因为问题中的代码是针对Python2的,所以我最初用Python2代码来回答,但是对于Python3用户来说,这个问题同样容易出现,所以我也为他们添加了一个部分

Python2的一个版本 以下内容基于并应补充问题中的代码:

for index, url in enumerate(URL_LIST):
    print 'Scanning url #' + str(index+1) + ' of ' + str(len(URL_LIST))
您还可以选择使用for循环生成的url变量添加正在扫描的url

此外,如果要将每次打印替换为最后一次,可以在打印语句的末尾添加逗号,并在开头添加字符:

for index, url in enumerate(URL_LIST):
    print '\rScanning url #' + str(index+1) + ' of ' + str(len(URL_LIST)),
逗号阻止打印在末尾添加新行字符,\n并且开始处的回车符\r会在打印行的其余部分之前删除行上已有的内容

Python2和Python3之间的打印差异 需要注意的是,在Python2和Python3中,print的功能完全不同。上述“Python2”解决方案在Python3中不起作用

首先,Python3中的print是一个函数,而不是关键字,因此必须将其作为函数调用,即print'print me!',其次,在末尾添加逗号不会阻止新行字符的输出。通常在末尾包含逗号不会产生明显的效果,但是解释器将其作为一个元组进行评估,其中包含一个None,这在使用Python时可以看到。相反,必须为print函数提供一个名为end的命名参数,以覆盖其默认值

Python3的一个版本 下面是一个与我在回答的顶部提供的代码相当的Python 3:

for index, url in enumerate(URL_LIST):
    print('Scanning url #' + str(index+1) + ' of ' + str(len(URL_LIST)))
如果要让每个打印重复使用同一行,如上面的第二个示例所示:

for index, url in enumerate(URL_LIST):
    print('\rScanning url #' + str(index+1) + ' of ' + str(len(URL_LIST)), end='')

如果您没有阅读上面的所有内容,请注意end=将覆盖打印函数的默认操作,即在每行末尾添加一个换行符,\n以使其添加一个空字符串,字符串开头的回车符\r会使Python返回到行的开头,以打印字符串的其余部分。

谢谢您的输入,我真的试图避免出现进度条-我已经有了进度条,更希望在每次迭代发生时计数并打印,以便快速直观地检查进度。非常感谢您提供的帮助这正是我想要的,只需将其缩短一点,并将URL从打印中删除,但这足以让我自己成长。刚刚删除了最后一部分-现在读到了“扫描url”+strindex+1+“+Strlenur\u列表输出现在正在扫描url 1/7,不想找到一个简单的答案,因为我喜欢自己尝试解决这个问题-但是有没有一种方法可以让它打印在同一行而不是回车?对不起-万一你回来,我已经有了答案打印“\r”“Scraping URL”+strindex+1+”of“+strlenURL\u LIST,再次感谢Hanks,我已经将信息添加到了答案中,还为Python3用户添加了信息。