haniaman
@haniaman
Учусь на программиста

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

Здравствуйте, есть парсер, мне надо чтобы значения выводились в csv файл. У меня все получилось сделать, но есть числа на подобии 5.3 , 1.03 , 7.10 и тп. И в csv файле они выводятся как дата:

1 game 07.окт Время: 04:17:27
2 game фев.73 Время: 04:17:35
3 game апр.61 Время: 04:17:55
4 game мар.14 Время: 04:18:26
5 game авг.24 Время: 04:19:10

Как это можно исправить чтобы выводилось как в консоле?:
['1', 'game', '7.10', 'Время: 04:17:27']
['2', 'game', '2.73', 'Время: 04:17:35']
['3', 'game', '4.61', 'Время: 04:17:55']
['4', 'game', '3.14', 'Время: 04:18:26']
['5', 'game', '8.24', 'Время: 04:19:10']

Код:
from selenium import webdriver
import time
import csv

driver = webdriver.Chrome()

driver.get("https://rublix.best/")

prev_bet = 0
a = 1

time.sleep(12)
while True:
    # Находит блок с "Историей игр".
    all_bets = driver.find_elements_by_xpath("//div[contains(@class, 'history-line')]")

    # Определение времени на данный момент.
    named_tuple = time.localtime() # получить struct_time.
    time_string = time.strftime("Время: %H:%M:%S", named_tuple)

    # Выбирает последнюю из списка игру.
    if all_bets:
        last_bet = all_bets[0].text

        # Выводит на экран последнюю игру в формате: ['5', 'game', '8.24', 'Время: 04:19:10'].
        if last_bet != prev_bet:
            prev_bet = last_bet
            # Создается список с данными: ['Number', 'game', 'result', 'Время: HH:MM:SS'].
            t = [str(a), 'game', '{}'.format(last_bet), '{}'.format(time_string)]
            print(t)
            a+=1 
            myFile = open('test_game1.csv', 'a', newline='')
            with myFile:
                writer = csv.writer(myFile, delimiter=';') # Записывает в myFile с разделителем ';' для перехода в след. ячейку.
                writer.writerows([t]) # Записывает список списка переменной t, иначе через каждый символ будет запятая.
    time.sleep(1)
  • Вопрос задан
  • 1737 просмотров
Пригласить эксперта
Ответы на вопрос 3
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы самое главное упустили. В виде дат эти строки выглядят в экселе, а CSV тут ни при чем. Это простой текстовый формат и в нем нельзя указать тип данных ячейки.
Вам в соседнем ответе уже порекомендовали настроить тип данных ячеек в экселе. Это именно его, экселевская, проблема. Слишком "умный".

Однако есть и своеобразный лайфхак. Чтобы десятичные дробные числа не воспринимались экселем как даты, можно сделать их на даты непохожими. Сделать это можно дописав справа в дробной части нули. Можно даже потоковый конвертер сделать, который будет все дробные числа форматировать нулями до, скажем, шести знаков после запятой. Это незначащие нули и на числовые данные они не повлияют, зато эксель не будет их датой показывать.

Ещё причина, по которой эксель может не распознать число - это десятичный разделитель, который определяется локалью и в одних странах его принято делать точкой, в других запятой. Это вносит неразбериху. Если наверняка знаете под какую локаль делаете файл, то можете подставить нужный разделитель. Если нет -- используйте точку.
Ответ написан
Комментировать
@galaxy
Они в csv файле, скорее всего, нормально выводятся. Это в экселе уже так форматируется. Используйте диалог Data->From Text и укажите формат ячейки
Ответ написан
Комментировать
@Korben5E
csv - это текстовый файл, откройте блокнотом, посмотрите что там и как.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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