@Ander813

Как при помощи питона сохранять данные в формате csv в разных ячейках, при открытии в экселе?

Написал самый простой парсер, но не могу его сохранить в csv формате так, чтобы в экселе данные сохранялись в разные ячейки(A-день недели, B-число, C-температура).
import requests
from bs4 import BeautifulSoup
import lxml
import csv

url = "https://world-weather.ru/pogoda/russia/saint_petersburg"
temperatures=[]
def get_html(url):
    r = requests.get(url)
    return r.text

def get_temperature(html):
    a = 0
    global temperatures
    soup = BeautifulSoup(html, 'lxml')
    temperature_get = soup.find('ul', id="vertical_tabs")
    for temperature in temperature_get.find_all('div', class_='day-temperature'):
        temperatures.append({
            'week_day' : temperature_get.find_all('div', class_='day-week')[a].text,
            'day_number' : temperature_get.find_all('div', class_='numbers-month')[a].text,
            'temperature': temperature_get.find_all('div', class_='day-temperature')[a].text,
        })
        a += 1
    return temperatures
def save(temp,path):
    global temperatures
    with open(path, 'w') as csvfile:
        writer = csv.writer(csvfile, delimiter=' ')
        writer.writerow(('День недели', 'Число', 'Температура'))

        for temperature in temperatures:
            writer.writerow((temperature['week_day'], temperature['day_number'], temperature['temperature']))


def main():
    print(get_temperature(get_html(url)))
    save(get_temperature, 'temperature.csv')
if __name__ == "__main__":
    main()

5c290c0dee08d156543638.png
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
@Iv_and_S
ячейки объединяются потому что, если открывать в Exel напрямую (дабл клик по файлу и Exel программа по умолчанию для .csv), он не спрашивает какой разделитель использовать, а пихает все как ему удобно.
поэтому:
- либо загуглить "Как импортировать CSV в Excel" (Вкладка "данные" ->>"из текста") , и там будет ЯВНЫЙ выбор разделителя, выбрать пробел в Вашем случае -и все будет ОК.
- либо использовать Libre Office ,который при открытии , интересуется "а какой же разделитель мы будем использовать" - выбрать пробел, и будет ОК.

К тому же:
- delimiter=' ' здесь в Вашем случае указывается разделитель
- "День недели" - лучше "День_недели" - ну все же пробел разделить, мало ли.
- ну и Pandas конечно не надо, для данной задачи, это слишком.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
x67
@x67
Используй библиотеку pandas:
import pandas as pd
df=pd.DataFrame()
df['day']=days_list
df['temp']=temp_list
df.to_csv('/home/ander/res.csv')
Можно импортировать не только из списков, а из чего угодно. Можно и построчно добавлять данные, но это чуть медленнее. У панды есть некоторая специфика работы, к которой надо привыкнуть, но это самый крутой инструмент для работы с csv.
Код позже с компа отформатирую
Ответ написан
@MechanicZelenyy
При открытии csv файла в excel нужно указать использованный вами разделитель.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Cashwagon Москва
от 150 000 руб.
от 60 000 до 120 000 руб.
Work Solutions Ростов-на-Дону
от 70 000 до 100 000 руб.