Python API запускает пакеты по 100 000 в цикле while / for без изменения значений вручную

#python #python-3.x #python-requests

#python #python-3.x #python-запросы

Вопрос:

У меня есть около 1,5 миллионов индикаторов, которые у меня есть в формате csv, который я запускаю через Anomali API. Если я прогоняю все за один раз, это завершается неудачей, но если я пакую это так:

 anomali_indicators = anomali_indicators[300000:400000]
  

И выполняйте 100000 за раз, когда он завершается без проблем, тогда я могу добавлять файлы. Но для этого мне нужно пойти и изменить значения, и запустить это 15 раз. Есть ли способ, которым я могу настроить свой цикл while и for, чтобы запускать 100 000 за раз, а затем записывать в csv, затем запускать следующие 100 000 и так далее?

Код:

 import pandas as pd
import requests
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

url = 'https://something.com/api/v2/intelligence/?username='
username = '<username>'
api_key = '<key>'
WAIT_SECONDS = 5

#ANOMALI
anomali_indicators = pd.read_csv('initial_anomali_indicators.csv')
anomali_indicators = anomali_indicators[300000:400000]
anomali_list = anomali_indicators['value'].tolist()
column1 = list()
column2 = list()
column3 = list()
column4 = list()
column5 = list()
i=0
while i < len(anomali_list):
    try:
        for row in anomali_list:
            value_api = url username 'amp;api_key=' api_key 'amp;limit=10000amp;value='
            responses = requests.get(value_api row, verify=False)
            data = json.loads(responses.text)
            valuess = data['objects']

            for index in valuess:
                column1.append(index['value'])
                column2.append(index['source'])
                column3.append(index['trusted_circle_ids'])
                column4.append(index['created_ts'])
                column5.append(index['tags'])
        anomali__output = pd.DataFrame({'Indicator': column1,
                                        'Source': column2,
                                        'Trusted Circle': column3,
                                        'Created': column4,
                                        'Tags': column5
                                        })
        i  = 1
        break
    except requests.exceptions.ConnectionError:
        #print(len(column1))
        print("Time to sleep for 5 seconds")
    time.sleep(WAIT_SECONDS)
anomali__output.to_csv('anomali_with_others_first_seen_300000-400000.csv', 
header=True, index=False)
  

Ответ №1:

Просто оберните это другим «циклом пакетной обработки», подобным этому, и все готово:

 for batch_idx in range(15):
    current_anomali_indicators = anomali_indicators[batch_idx*100000:(batch_idx 1)*100000]

    # and here goes the rest of your code...

  

Имейте в виду, что хранение такого объема данных в памяти может быть не очень хорошей идеей, поэтому вы можете захотеть записать результаты в свой CSV-файл в цикле пакетной обработки на 100 кб.