ФорумПрограммированиеPython → Преобразование строки из переменной в дату через datetime.strptime

Преобразование строки из переменной в дату через datetime.strptime

  • lazgo

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 28 июня 2018 г. 6:40

    Здравствуйте. Много гуглил, и на форуме здесь искал, есть только когда пишешь не посредственно строку в strptime, а как строку из переменной вставить не могу понять. Подскажите пожалуйста.

    
    import time
    import datetime
    import os
    directory = 'd:/dir/daily/'
    files = os.listdir(directory)
    now = datetime.datetime.now()
    for key in files:
        base = os.path.splitext(key)[0]
        base_date = datetime.datetime.strptime(base, '%d.%m.%y')
        if now > base_date:
            print(base_date)
            print('Удалить!')
        else:
            print(base_date)
            print('Оставить.')
    

    Так не работает.

  • Sinkler

    Сообщения: 7956 Репутация: N Группа: в ухо

    Spritz 28 июня 2018 г. 7:03, спустя 22 минуты 46 секунд

    @lazgo, подебажьте: добавьте после base = os.path.splitext(key)[0] строку print(base) и посмотрите какой формат у даты, возможно он не %d.%m.%y

  • lazgo

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 28 июня 2018 г. 7:11, спустя 8 минут 20 секунд

    Я уже все переменные пересмотрел, все форматы, все типы, все там норм. Дело в том, что ему не нравится в strptime первый аргумент это переменная, он требует именно строку, хотя у переменной base тип строка и в ней строка 19.06.18. Я не понимаю что ему не нравиться. Если написать так:

    
    import time
    import datetime
    import os
    directory = 'd:/dir/daily/'
    files = os.listdir(directory)
    now = datetime.datetime.now()
    for key in files:
        base = os.path.splitext(key)[0]
        base_date = datetime.datetime.strptime('19.06.18', '%d.%m.%y')
        if now > base_date:
            print(base_date)
            print('Удалить!')
        else:
            print(base_date)
            print('Оставить.')

    то все работает. Но в папке много файлов, их нужно перебрать и каждый сравнить. Суть в том, нужно сравнить даты файлов и старые удалить. Дату беру из имени файла. Может как то иначе предложите реализацию?

  • Sinkler

    Сообщения: 7956 Репутация: N Группа: в ухо

    Spritz 28 июня 2018 г. 7:15, спустя 3 минуты 58 секунд

    @lazgo а текст ошибки и какой exception вылетает напишите? а то так как на гуще гадать)

    это должно работать

    Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import datetime
    >>> base = '19.06.18'
    >>> datetime.datetime.strptime(base, '%d.%m.%y')
    datetime.datetime(2018, 6, 19, 0, 0)
  • lazgo

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 28 июня 2018 г. 7:23, спустя 8 минут 11 секунд

    Я разобрался формат я проглядел там год не 18 а 2018 то есть не %у а %У))) все спасибо огромное)

  • adw0rd

    Сообщения: 22936 Репутация: N Группа: в ухо

    Spritz 28 июня 2018 г. 18:01, спустя 10 часов 38 минут

    thumbsup

    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!