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

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

  • lazgo

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

    Spritz Июнь 28, 2018, 1: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

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

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

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

  • lazgo

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

    Spritz Июнь 28, 2018, 2: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

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

    Spritz Июнь 28, 2018, 2: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, 2:23 п.п., спустя 8 минут 11 секунд

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

  • adw0rd

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

    Spritz Июнь 29, 2018, 1:01 д.п., спустя 10 часов 38 минут

    thumbsup

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

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

    Spritz Авг. 16, 2021, 6:38 д.п., спустя 1144 дня 5 часов 36 минут

    Range boosters are very good for every type of domain you have, and it only consists of improving your interaction algorithm. You must increase the popularity of your website using legendary SEO techniques that solve your life in weeks. You can know and use a good number of techniques at no cost or hire the most profitable one.
    Find Out How Quickly You Can Rank High In Your Business

    how much do sponsors pay

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