Найти - Пользователи
Полная версия: Проблема с циклом чтения файла
Начало » Python для новичков » Проблема с циклом чтения файла
1
KongoMan
Я беру из файла id товаров и подставляю их в url запрос. Все работает,пока id в файле не становиться слишком много (около 60 000),тогда я пытаюсь циклом доставать с файла первые 400 id и делать запрос,потом следующие 400 и так до конца. Но код почему-то не работает и отправляет сразу все 60 000 id в url запрос. Помогите пожалуйста определить место ошибки. Код представлен ниже

 import json
import itertools
import requests
import pandas as pd
def get_product_data():
    # Читаем айдишники из файла в один большой список
    with open('id.json', 'r') as file:
        ids = [line.strip() for line in file]
    # Делаем из одномерного списка двумерный список каждые n элементов
    count = 400
    ids = [ids[n:n + count] for n in range(0, len(ids), count)]
    # Отправляем GET и получаем результат
    result = []
    for group in ids:
        payload_data = {'product_ids': ' '.join(group)}
        f = requests.get('https://example.com/get?', params=payload_data)
        if f.status_code == 200:
            print('Good')
        if 'json' in f.headers['content-type']:
            print('Very Good')
        result.append(f.json())
        d = f.json()
    return d
#разбор словарь получаемых данных
def flatten_dict(d):
    def expand(key, value):
        if isinstance(value, dict):
            return [ (key + '.' + k, v) for k, v in flatten_dict(value).items() ]
        else:
            return [ (key, value) ]
    items = [ item for k, v in d.items() for item in expand(k, v) ]
    return dict(items)
# формируем DataFrem
d = get_product_data()
data = d['data']
data = list(map(flatten_dict, data))
df = pd.DataFrame(data)
print(df[["id","title","price","old_price","href","comments_amount","sell_status","category_id","mpath","tag.name","tag.priority"]])
py.user.next
Сделай функцию-генератор, которая из файла достаёт заданное число записей.

Пример функции-генератора
  
>>> def split_list(lst, size):
...     out = []
...     for i in lst:
...         out.append(i)
...         if len(out) == size:
...             yield out
...             out = []
...     if out:
...         yield out
... 
>>> list(split_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 1))
[[1], [2], [3], [4], [5], [6], [7], [8], [9]]
>>> 
>>> list(split_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 2))
[[1, 2], [3, 4], [5, 6], [7, 8], [9]]
>>> 
>>> list(split_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 3))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> 
>>> list(split_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 4))
[[1, 2, 3, 4], [5, 6, 7, 8], [9]]
>>>
KongoMan
С
py.user.next
Сделай функцию-генератор, которая из файла достаёт заданное число записей.Пример функции-генератора

Спасибо большое!
Помогло.Очень признателен.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB