Я не могу говорить за ваш код, так как не могу его запустить, 'filter_text', кажется, функция, которую вы написали, но не включили.
по сути, у вас есть одна из двух ошибок, которые я вижу ,
сначала неясно, где вы инициализируете объект writer
.
2-й, когда вы перезаписываете лист каждым l oop - переместите его за пределы l oop .
pd.ExcelFile
можно использовать в качестве менеджера контекста - поэтому вам нужно закрыть / сохранить его.
def close(self):
"""synonym for save, to make it more file-like"""
return self.save()
writer = pd.ExcelWriter('file.xlsx')
for sub in sublocation_ids:
city_num_int = sub['id']
city_num_str = str(city_num_int)
city_name = sub['name']
filter_text_new = filter_text.format(city_num_str)
data = json.dumps({"filters": [filter_text_new], "sort_by":"created_at", "size":2})
r = requests.post(url = api_endpoint, data = data).json()
articles_list = r["articles"]
articles_list_normalized = json_normalize(articles_list)
df = articles_list_normalized
df['publication_timestamp'] = pd.to_datetime(df['publication_timestamp'])
df['publication_timestamp'] = df['publication_timestamp'].apply(lambda x: x.now().strftime('%Y-%m-%d'))
df.to_excel(writer, sheet_name = city_name)
writer.save() # move this after you've finished writing to your writer object.
Листы в виде словарей
, если вам интересны внутренности класса, используйте .__dict__.
для объекта, чтобы вы могли видеть метаданные.
writer = pd.ExcelWriter('file.xlsx')
df.to_excel(writer,sheet_name='Sheet1')
df.to_excel(writer,sheet_name='Sheet2')
print(writer.__dict__)
{'path': 'file.xlsx',
'sheets': {'Sheet1': <xlsxwriter.worksheet.Worksheet at 0x11a05a79a88>,
'Sheet2': <xlsxwriter.worksheet.Worksheet at 0x11a065218c8>},
'cur_sheet': None,
'date_format': 'YYYY-MM-DD',
'datetime_format': 'YYYY-MM-DD HH:MM:SS',
'mode': 'w',
'book': <xlsxwriter.workbook.Workbook at 0x11a064ff1c8>}