На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Определение даты доступа к файлу
      Здравствуйте!
      Нашел в интернете следующие способы определения времени создания, модификации и последнего доступа к файлу:
      ExpandedWrap disabled
        import os
        import stat
        import datetime
        file_path = "V:/TestPrograms/Файл-даты создания и модификации.txt"
        create_time = os.path.getctime(file_path)
        formatted_time = datetime.datetime.fromtimestamp(create_time)
        print("Date created: ", formatted_time)
         
        modTimesinceEpoc = os.path.getmtime(file_path)
        modificationTime = datetime.datetime.fromtimestamp(modTimesinceEpoc).strftime('%Y-%m-%d %H:%M:%S')
        print("Last Modified Time : ", modificationTime )
         
        fileStatsObj = os.stat ( file_path )
        # Get last access time
        accessTime = datetime.datetime.ctime ( fileStatsObj [ stat.ST_ATIME ] )
        #accessTime = datetime.time.ctime ( fileStatsObj [ stat.ST_ATIME ] )
        print ("Last Access Time : ", accessTime )
      Даты создания и модификации определяются нормально, а при попытке определения даты доступа к файлу (как я понимаю, даты его чтения), в PyCharm получаю ошибку:
      ExpandedWrap disabled
        File "E:\MyProgramming\pyPyCharm\.venv\Scripts\TestPy.py", line 15, in <module>
            accessTime = datetime.datetime.ctime ( fileStatsObj [ stat.ST_ATIME ] )
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        TypeError: descriptor 'ctime' for 'datetime.datetime' objects doesn't apply to a 'int' object
        Date created:  2023-07-19 14:54:31.423644
        Last Modified Time :  2023-07-19 15:00:00
        Process finished with exit code 1
      Что я делаю неправильно? Тестовый файл прикрепил.
      Прикреплённый файлПрикреплённый файлFile.7z (323 байт, скачиваний: 19)
        Я в питоне ещё пока сильно не поднаторел, но обычно делаю так:
        копирую полный текст ошибки в поиск в гугле. и частенько нахожу решение в тырнете.
        на твой вопрос решение может быть тут
        https://stackoverflow.com/questions/6643149...esnt-apply-to-a

        Ищите и обрящете! © Song :D
          tumanovalex, ты используешь слишком много разных инструментов одновременно, и это тебя запутывает.

          В модуле os, функции stat (следует символическим ссылкам), lstat (не следует символическим ссылкам), fstat (работает с дескрипторами файлов) возвращают объект типа stat_result (похоже, кортеж с именованными полями).
          Этот объект имеет поля st_atime, st_ctime и st_mtime, содержащие, соответственно, время последнего обращения, создания и модификации, выраженные в секундах.
          Имеются также поля st_atime_ns, st_ctime_ns и st_mtime_ns, содержащие те же времена, выраженные в наносекундах.

          Ошибкаб о которой тебе сообщают, состоит в том, что к целым надо применять функцию ctime из модуля time, а ты пытаешься применить к ним метод объекта datetime, работающий с внутренностями объекта
            Я немного изменил код автора
            ExpandedWrap disabled
              import os
              import time
              import datetime
              file_path = "V:/TestPrograms/Файл-даты создания и модификации.txt"
               
              create_time = os.path.getctime(file_path)
              formatted_time = datetime.datetime.fromtimestamp(create_time)
              print("Дата создания: ", formatted_time)
               
              modTimesinceEpoc = os.path.getmtime(file_path)
              modificationTime = datetime.datetime.fromtimestamp(modTimesinceEpoc).strftime('%Y-%m-%d %H:%M:%S')
              print("Дата изменения : ", modificationTime )
               
              accessTimesinceEpoc = os.path.getatime(file_path)
              accessTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(accessTimesinceEpoc))
              print ("Дата последнего обращения : ", accessTime )
            Вывод без ошибок, вот только дата создания: 2023-07-19 14:54:31.423644, остальные даты выводятся только с секундами. Подскажите, пожалуйста, как избавиться от знаков после точки, чтобы выводились только секунды
              Мой вопрос был глупым, надо было
              ExpandedWrap disabled
                formatted_time = datetime.datetime.fromtimestamp(create_time).strftime('%Y-%m-%d %H:%M:%S')
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0313 ]   [ 17 queries used ]   [ Generated: 10.12.24, 05:32 GMT ]