#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 кб.