Как автоматизировать запись имени файла из заданного при сохранении данных в формате CSV? - PullRequest
0 голосов
/ 09 июля 2020

Я использую pytrends API для сбора данных о тенденциях Google и сохранения в файл csv. Как мне автоматизировать запись имени файла, взяв имя из списка?

Я пробовал следующий метод, но он дает мне generator object вместо ray ban or abaco.

Мой код:


user_kw_list = ['ray ban','abaco sunglasses']

interest_over_time_df.to_csv("./data/{}_interest_over_time.csv".format(user_kw_list[i] for i in range(len(user_kw_list))), index=True)

1 Ответ

2 голосов
/ 09 июля 2020

Это зависит от того, хотите ли вы иметь длинное имя файла, содержащее весь user_kw_list, или если вы хотите сохранить файл для каждого ключевого слова в вашем списке.

В любом случае, возможно, стоит поискать f-строки в. Если ваша версия Python поддерживает его, это очень кратко по сравнению с методом форматирования и хорошо оптимизировано. Подробнее о f-строках здесь .

Если вам нужно длинное имя файла, вам нужно join элементы вместе. В этом случае вам почти наверняка не понадобится понимание списка. Вот одно из возможных решений:

user_kw_list = ['ray ban','abaco sunglasses']

joined = ('_or_').join(user_kw_list).replace(' ', '_')
# .replace(' ', '_') is optional. It maintains the snake_case naming convention.

path = f"./data/{joined}_interest_over_time.csv"
# This is functionally similar to: "./data/{}_interest_over_time.csv".format(joined)

interest_over_time_df.to_csv(path, index=True)
# This will save the file as ./data/ray_ban_or_abaco_sunglasses_interest_over_time.csv
# Note: Very long filenames can sometimes cause problems on some operating systems.

И наоборот, если вы хотите сохранить файл для каждого ключевого слова в вашем списке, проблема в том, что ваш l oop содержится внутри вызова метода. Должно быть наоборот: for l oop инкапсулирует метод to_csv.

Традиционный for-l oop может быть более читаемым для этого варианта использования, поскольку вы выполнение кода с побочными эффектами вместо возврата переменной.

Одно решение будет выглядеть так:

user_kw_list = ['ray ban','abaco sunglasses']

for kw in user_kw_list:
    kw = kw.replace(' ', '_') 
    # As before, this line is optional. It maintains the snake_case convention.
    
    path = f"./data/{kw}_interest_over_time.csv"
    # This is functionally similar to: "./data/{}_interest_over_time.csv".format(kw)

    interest_over_time_df.to_csv(path, index=True)
    # This will save two files: ray_ban_interest_over_time.csv 
    # and abaco_sunglasses_interest_over_time.csv

Если второй случай должен быть пониманием списка, это будет выглядеть вот так:

[interest_over_time_df.to_csv(f"./data/{kw}_interest_over_time.csv", index=True) for kw in user_kw_list]
...