Выполнить действие каждый N-й вид строки - PullRequest
0 голосов
/ 08 сентября 2018

Существует скрипт Python , который позволяет выполнять пакетную загрузку путем обработки файла со списком идентификаторов (DOI / URL). Sci-hub, однако, довольно хорошо отслеживает такие действия, поэтому нужно делать небольшие партии в течение значительного количества времени и / или постоянно менять прокси, чтобы оставаться незамеченным.

Моя идея, однако, заключается в том, что это может быть автоматизировано (согласно моим почти несуществующим знаниям Python, это должно быть ключевым моментом для этого).

      elif args.file:
    with open(args.file, 'r') as f:
        identifiers = f.read().splitlines()
        for identifier in identifiers:
            result = sh.download(identifier, args.output)
            if 'err' in result:
                logger.debug('%s', result['err'])
            else:
                logger.debug('Successfully downloaded file with identifier %s', identifier)

Так можно ли:

  1. Подсчитать количество строк, которые были обработаны
  2. Запуск цикла, который для каждой 10-й итерации выполняет определенное действие (например, запускает паузу в 3-5 минут)

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете поместить индекс в свой цикл for. Вы можете использовать модуль или сбросить каждый раз:

    count = 0
    for identifier in identifiers:
        if count==10:
             action()
             count = 0
        count +=1
        result = sh.download(identifier, args.output)
        if 'err' in result:
            logger.debug('%s', result['err'])
        else:
            logger.debug('Successfully downloaded file with identifier %s', identifier)

Если вы хотите считать только успешные итерации, вы должны поместить код в блок else:

    count = 0
    for identifier in identifiers:
        result = sh.download(identifier, args.output)
        if 'err' in result:
            logger.debug('%s', result['err'])
        else:
            logger.debug('Successfully downloaded file with identifier %s', identifier)
            if count == 10:
                 action()
                 count = 0
            count +=1

Вы также можете использовать enumerate:

    for count, identifier in enumerate(identifiers):
        if count%10 == 0:
              action()
        result = sh.download(identifier, args.output)
        if 'err' in result:
            logger.debug('%s', result['err'])
        else:
            logger.debug('Successfully downloaded file with identifier %s', identifier)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...