Python 3.7 - Когда один счетчик достигает определенного значения, второй счетчик добавляет один (два счетчика работают одновременно) - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть этот код, работающий на меня:

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. Но я также хотел бы добавить еще один счетчик, который будет подсчитывать 1 для каждых 5000, когда вышеупомянутый счетчик увеличивается там, где находятся эти пять нулей. например:

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'. Самым первым изображением будет 'http://00000.IMAGE_1_1.jpg'.

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Если я правильно понял, что вам нужно, вам нужно проверять всякий раз, когда текущее число делится на нужный вам интервал (в данном случае 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
1 голос
/ 14 апреля 2019

вы можете использовать мод % для печати каждые 5000, и я указал на другие вещи, которые вы должны сделать для достижения своей цели:

  1. oc следует инициализировать как -1,потому что вы хотите начать с 0
  2. Я думаю, что вы хотите oc сохранить 5 ширину с префиксом 0, как 00044, поэтому вы должны использовать rjust здесь: str(oc).rjust(5, '0')
  3. 0 не требуется в range(0, 224999)
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))

output

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

Надеюсь, что это поможет вам, и прокомментируйте, если у вас есть дополнительные вопросы.:)

...