Импорт списка из файла
Столкнулся с проблемой. Мне нужно импортировать список(movie_attr) из файла(parse.py) в главный файл проекта,но у меня никак не получается это сделать.
parse:
def top():
r = requests.get('https://www.kinomania.ru/top/films')
html = bs(r.content, 'html.parser')
movie_cards = html.find_all('div', class_='table-top-item')
movie_attrs = []
for movie_card in movie_cards:
movie_attrs.append({
'title': movie_card.find('div', class_='table-top-title').get_text(),
'rating': movie_card.find('span',class_='table-top-info-raiting').get_text()
})
for movie_attr in movie_attrs:
return movie_attr
top()
Вот что выдает трэйсбек
Traceback (most recent call last):
File "main.py", line 7, in <module>
from parse import movie_attr
ImportError: cannot import name 'movie_attr' from 'parse' (/root/Рабочий стол/cinemabot/parse.py)
Ответы (1 шт):
В функции top вы значение возвращаете, но при вызове никуда не сохраняете. return movie_attr возвращает не переменную, а только ее значение (после вызова top() переменная movie_attr не становится магическим образом глобальной переменной модуля).
Чтобы можно было получить это значение - его нужно сохранить в переменную:
def top():
...
return movie_attr
movie_attr = top()
Также вместо импортирования переменной можно имопортировать и вызывать вызывать саму функцию top в другом модуле:
from parse import top
movie_attr = top()
Это удобно, например, если вдруг понадобится вызывать эту функцию с какими-то параметрами.
Также, обратите внимание, что цикл for в конце функции top возвращает только первое значение из списка movie_attrs (через return можно вернуть значение только один раз, т.к. return прерывает выполнение функции). Удобнее было бы возвращать весь список movie_attrs целиком без цикла.