Python 3.7 - 当一个计数器达到一定值时,第二个计数器加一(两个计数器 运行 同时)

Python 3.7 - When one counter reaches certain value 2nd counter adds one (two counters running same time)

我这里有适合我的代码:

import urllib3

http = urllib3.PoolManager()
location = 'Drive\where-images-go\'
N = 0

for x in range(0, 5000):
    urls = ('http://00000.IMAGE_1_'+str(x)+'.jpg')
    r = http.request('GET', urls)
    Name = str(N+1)
    N += 1
    with open(location + 'image'+Name+'_image.jpg', 'wb') as img:
      img.write(r.data)

此代码将创建一个 url,它将 str(x) 从 0 计数到 5000。但我还想添加另一个计数器,上面的计数器每上升 5000 就会计数 1那五个零在哪里。例如:

import urllib3
http = urllib3.PoolManager()
location = 'Drive\where-images-go\'
N = 0

for x in range(0, 224999):
    for every 5000 in x:
        othercounter = oc
        oc = oc +1
        urls = ('http://'+str(oc)+'.IMAGE_1_'+str(x)+'.jpg')
        r = http.request('GET', urls)
        Name = str(N+1)
        N += 1
        with open(location + 'image'+Name+'_image.jpg', 'wb') as img:
          img.write(r.data)

因此,每次 str(x) 达到 5000 时,oc(othercounter) 将增加 1。由于第二个示例代码的范围是 (0,224999),oc 计数器将为 44,最后一个 url 将是 'http://00044.IMAGE_1_224999.jpg'. The very first image will have been 'http://00000.IMAGE_1_1.jpg'。

如何解决这个问题?

您可以使用 mod % 打印每 5000 个,我已经指出了您应该做的其他事情来实现您的目标:

  1. oc应该初始化为-1,因为你要从0
  2. 开始
  3. 我想你想要 oc 保持 5 个宽度,前缀为 0,比如 00044,所以你应该在这里使用 rjuststr(oc).rjust(5, '0')
  4. 0range(0, 224999)
  5. 中不是必需的
import urllib3
http = urllib3.PoolManager()
location = 'Drive\where-images-go\'

N = 0
oc = -1
for x in range(224999):
    N += 1
    if x % 5000 == 0:
        oc += 1

    urls = ('http://' + str(oc).rjust(5, '0') + '.IMAGE_1_' + str(N) + '.jpg')
    r = http.request('GET', urls)

    with open(location + 'image'+str(N)+'_image.jpg', 'wb') as img:
        img.write(r.data)

    # test code, need to remove
    # the first
    if x == 0:
        print('first url: {}'.format(urls))

    # the last
    if x == 224998:
        print('last url: {}'.format(urls))

输出

first url: http://00000.IMAGE_1_1.jpg
last url: http://00044.IMAGE_1_224999.jpg

希望对您有所帮助,如有其他问题,请评论。 :)

如果我正确理解了您的需求,您只需要检查当前数字是否可以被您需要的间隔(在本例中为 5000)整除。

另请注意,通过将范围限制设置为 5000,您的第一个计数器只会 运行 最多 4999。

other_counter = 0
for x in range(0, 15_001):  # Runs from 0 to 15000 included.
    if x % 5000 == 0:  # Results in True every time a multiple of 5000 is reached.
        other_counter += 1