@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
  • Вопрос задан
  • 141 просмотр
Решения вопроса 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 нужно указать использованный вами разделитель.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы