Как создать цикл, чтобы все запросы попадали в один csv через python?

Я создал функцию, которая извлекает цену, рейтинг и т. д. после того, как попадет в API:

def is_priced(business_id):
    try:
        priced_ind = get_business(API_KEY, business_id)
        priced_ind1 = priced_ind['price']
    except:
        priced_ind1 = 'None'
    return priced_ind1

priced_ind = is_priced(b_id)
print(priced_ind)

Аналогично для рейтинга

def is_rated(business_id):

    try:
        rated_ind = get_business(API_KEY, business_id)

        rated_ind1 = rated_ind['rating']
    except:
        rated_ind1 = 'None'
    return rated_ind1

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

Файл CSV содержит информацию о названии компании, а также ее адрес, город, штат, почтовый индекс и страну.

Eg:

Name        address             city            state zip    country
XYZ(The)    5* WE 223899th St.  New York        NY    19921       US

Мой вывод:

Querying https://api.xyz.com/v3/businesses/matches ...
True
Querying https://api.xyz.com/v3/businesses/matches ...
4.0
Querying https://api.xyz.com/v3/businesses/matches ...
$$
Querying https://api.xyz.com/v3/businesses/matches ...
Querying https://api.xyz.com/v3/businesses/matches ...

Настоящая проблема заключается в том, что мой вывод возвращает только бизнес-идентификатор в csv. и рейтинг и т. д., как вы видите, просто возвращается в консоль. как мне настроить цикл так, чтобы он возвращал для всех предприятий нужную мне информацию в один CSV?


person Investor25    schedule 27.06.2018    source источник
comment
Не могли бы вы привести пример вашего CSV-файла?   -  person Haytam    schedule 27.06.2018
comment
Файл CSV содержит информацию о названии компании, а также ее адрес, город, штат, почтовый индекс и страну.   -  person Investor25    schedule 27.06.2018
comment
Не могли бы вы отредактировать свой пост с примером строки? Нам нужно знать, как анализировать бизнес-файл CSV.   -  person James    schedule 27.06.2018
comment
Они разделены пробелом?   -  person Haytam    schedule 27.06.2018
comment
Это всего лишь пример. игнорировать форматирование. Но каждый заголовок имеет информацию ниже в мастер-данных   -  person Investor25    schedule 27.06.2018
comment
Идентификатор компании совпадает с названием?   -  person James    schedule 27.06.2018
comment
Какой разделитель в CSV-файле? Это точно запятая? Является ли пример, который вы опубликовали, из необработанного файла или из фрейма данных pandas?   -  person James    schedule 27.06.2018
comment
Идентификатор компании, который я уже получил для каждой компании   -  person Investor25    schedule 27.06.2018
comment
И как вы сопоставляете идентификатор компании с названием компании? Для того, что вы спросили, отсутствует много информации.   -  person James    schedule 27.06.2018
comment
Я уже сопоставил b_id с именем. Мой вопрос в том, как объединить все эти выходные данные в один единый csv   -  person Investor25    schedule 27.06.2018
comment
Так что, если я дам вам название компании, вы можете дать мне его идентификатор? что если is_priced возьмет business_name вместо id, это все еще будет работать для вас? Поскольку у нас есть доступ только к имени в csv.   -  person Haytam    schedule 27.06.2018


Ответы (3)


Модуль csv полезен для таких вещей, например.

import csv

with open('f.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    with open('tmp.csv', 'w') as output:
        writer = csv.writer(output)
        for row in reader:
            business_id = row[0]
            row.append(get_price_index(business_id))
            row.append(get_rate_index(business_id))
            writer.writerow(row)
person Jonah    schedule 27.06.2018

Вы можете прочитать названия компаний из CSV-файла, перебрать их с помощью цикла for, обратиться к API и сохранить результаты, а затем записать в новый CSV-файл.

import csv

data = []

with open('businesses.csv') as fp:
    # skip header line
    header = next(fp)
    reader = csv.reader(fp)
    for row in reader:
        b_name = reader[0]
        # not sure how you get the business ID:
        b_id = get_business_id(b_name)
        p = is_priced(b_id)
        r = is_rated(b_id)
        out.append((b_name, p, r))

# write out the results
with open('business_data.csv', 'w') as fp:
    writer = csv.writer(fp)
    writer.writerow(['name', 'price', 'rating'])
    for row in data:
        writer.writerow(row)
person James    schedule 27.06.2018

Вы можете сделать это легко, используя pandas:

import pandas as pd
csv = pd.read_csv('your_csv.csv', usecols=['business_name']) # since you only need the name
# you'll receive business_name in your functions
csv = csv.apply(is_priced, axis=1) 
csv = csv.apply(is_rated, axis=1)
csv.to_csv('result.csv', index=False)

Все, что вам нужно сделать в своих функциях, это:

def is_priced(row):
    business_name = row['business_name']
    business_id = ??
    ...
person Haytam    schedule 27.06.2018
comment
пожалуйста, см. переиздание. Проблема в том, что я могу запустить цикл, но он извлекает только b_id, другие вертикали, такие как рейтинг и т. д., не могут войти в csv. - person Investor25; 27.06.2018
comment
О, мой плохой, см. eidt. - person Haytam; 27.06.2018