Как я могу использовать данные загрузки данных, если источник данных даты находится в формате yyyymmdd, например. 20180131 [дубликат]

Архитектура

Назначение значений по умолчанию в вызове функции - это запах кода.

def a(b=[]):
    pass

Это сигнатура функции, которая не подходит. Не только из-за проблем, описанных в других ответах. Я не буду вдаваться в это.

Эта функция направлена ​​на то, чтобы сделать две вещи. Создайте новый список и выполните функциональность, скорее всего, в указанном списке.

Функции, которые делают две вещи, являются плохими функциями, поскольку мы учимся на чистых практиках кода.

Атака на эту проблему с полиморфизмом мы будем расширять список python или переносить его в класс, а затем выполнять свою функцию на нем.

Но подождите, пока вы скажете, мне нравятся мои однострочные.

Ну , Угадай, что. Код - это не просто способ управления поведением оборудования. Это способ:

  • общаться с другими разработчиками, работающими над одним и тем же кодом.
  • может изменить поведение аппаратного обеспечения при появлении новых требований.
  • , способный понять поток программы после того, как вы снова забираете код через два года, чтобы сделать упомянутое выше изменение.

Не оставляйте бомбы замедленного действия для себя

Отделяя эту функцию от двух вещей, которые она делает, нам нужен класс

class ListNeedsFives(object):
    def __init__(self, b=None):
        if b is None:
            b = []
        self.b = b

    def foo():
        self.b.append(5)

Выполнено

a = ListNeedsFives()
a.foo()
a.b

И почему это лучше, чем слияние всего вышеописанного кода с одной функцией.

def dontdothis(b=None):
    if b is None:
        b = []
    b.append(5)
    return b

Почему бы не сделать это?

Если вы не сработаете в своем проекте, ваш код будет жить. Скорее всего, ваша функция будет делать больше, чем это. Правильный способ создания поддерживаемого кода состоит в том, чтобы разделить код на атомные части с должным образом ограниченным объемом.

Конструктор класса является очень общепризнанным компонентом для всех, кто сделал объектно-ориентированное программирование. Размещение логики, которая обрабатывает экземпляр списка в конструкторе, делает когнитивную нагрузку понимания того, что делает код меньше.

Метод foo() не возвращает список, почему бы и нет?

При возврате отдельного списка вы можете предположить, что безопасно делать то, что вам хочется. Но это может быть не так, поскольку он также разделяется объектом a. Заставляя пользователя ссылаться на него как a.b, он напоминает, где находится список. Любой новый код, который хочет изменить a.b, естественно, будет помещен в класс, где он принадлежит.

Функция подписи def dontdothis(b=None): не имеет ни одного из этих преимуществ.

12
задан enchance 17 November 2011 в 08:36
поделиться

3 ответа

Вы можете заменить формат во время импорта данных из файла CSV, например -

LOAD DATA INFILE 'file_name.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
(id, column2, column3, @date_time_variable) -- read one of the field to variable
SET date_time_column = STR_TO_DATE(@date_time_variable, '%d-%b-%Y'); -- format this date-time variable

Он будет форматировать строку типа «31 -Jan-2011» до правильного типа данных DATETIME.

Дополнительная информация здесь - LOAD DATA INFILE Синтаксис .

35
ответ дан Devart 21 August 2018 в 15:39
поделиться

Если файл не слишком большой, загрузите CSV в Excel и используйте команды форматирования там, чтобы изменить представление даты.

-1
ответ дан Fagan Walker 21 August 2018 в 15:39
поделиться
  • 1
    Ваш ответ действительно не помогает в вопросе SQL. Кроме того, Excel не очень-то просто встраивается в пакетный процесс. – Thomas Baruchel 19 December 2015 в 23:41
  • 2
    Это сработало для меня, просто изменил формат даты в excel для столбца на «yyyy-mm-dd», сохраненный как csv и импортированный. – John Little 17 January 2017 в 12:10
mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%Y-%m-%d');
+------------------------------------------------+
| DATE_FORMAT('2009-10-04 22:23:00', '%Y-%m-%d') |
+------------------------------------------------+
| 2009-10-04                                     | 
+------------------------------------------------+
1 row in set (0.00 sec)
0
ответ дан Rush 21 August 2018 в 15:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: