Пишу только один ответ, почему?

#python #python-3.x #get

Вопрос:

Пытаюсь получить каждый ответ, чтобы сохранить. Пока он печатает только все ответы и сохраняет один. Пожалуйста, помогите. Изменить: нужна помощь в сохранении всех ответов.

 import requests
import json

url = 'https://www.virustotal.com/vtapi/v2/file/report'
resource = []
with open("/PATH/hashes.txt", "r") as f:
    for resource in f:
        print(resource)
        params = {'apikey': 'API KEY HERE', 'resource': resource}
        response = requests.get(url, params=params)
        response1 = response.json()
        print(response.json())
        with open('data.json', 'w') as J:
            json.dump(response1, J, indent=6)
 

Обновлено!! Спасибо за всю помощь!

 import requests
import json

url = 'https://www.virustotal.com/vtapi/v2/file/report'
params = {'apikey': 'API KEY HERE'}
resources = []
with open("/PATH/hashes.txt", "r") as f:
    for resource in f:
        print(resource)
        params['resource'] = resource
        response = requests.get(url, params=params)
        json_data = response.json()['sha256']
        print(json_data)
        resources.append(json_data)

with open('data.json', 'w') as J:
    json.dump(resources, J, indent=6)
J.close()
f.close()
 

Комментарии:

1. на каждой итерации цикла for вы перезаписываете data.json

2. при использовании with контекстного менеджера нет необходимости закрывать файл. об этом позаботится контекстный менеджер

3. Кроме того, если вам нужна только одна строка ( sha256 ) из каждого ответа, действительно ли вам нужен выходной файл JSON?

Ответ №1:

 import requests
import json

url = 'https://www.virustotal.com/vtapi/v2/file/report'
params = {'apikey': 'API KEY HERE'}
resources = []
with open("/PATH/hashes.txt", "r") as f:
    for resource in f:
        print(resource)
        params['resource'] = resource
        response = requests.get(url, params=params)
        json_data = response.json()
        print(json_data)
        resources.append(json_data)

with open('data.json', 'w') as f:
    json.dump(resources, f, indent=6)
 

В исходном коде вы перезаписываете data.json его на каждой итерации цикла.
Добавьте каждый ответ JSON в resources список (обратите внимание на множественное число в имени — в своем коде вы просто перезаписываете пустой список, повторно используя имя resource в цикле for). Затем сбросьте список (это будет массив JSON) в файл JSON .

Комментарии:

1. тай, это сработало лучше всего для того, что я делаю!

Ответ №2:

В каждой итерации цикла вы перезаписываете data.json . Вместо этого вы можете добавить к нему, открыв его в a режиме («добавить») вместо w режима («запись»).:

 with open('data.json', 'a') as J:
    # Here -------------^
 

Комментарии:

1. ТАЙ! Я слишком много думал об этом.

2. ну, результирующий файл не будет действительным JSON. это будет просто несколько ответов JSON один за другим.

3. 🙁 как вы предлагаете сделать его допустимым файлом json?