Python дата создания файла windows

Python дата создания файла windows

560231 просмотра

12 ответа

У меня есть сценарий, который должен делать некоторые вещи на основе дат создания и модификации файлов, но должен работать в Linux и Windows.

Каков наилучший кросс-платформенный способ для создания и изменения даты и времени создания файла в Python?

Ответы (12)

379 плюса

Получить некоторую дату модификации кросс-платформенным способом — просто позвонить, и вы получите отметку времени Unix, когда последний файл был изменен. os.path.getmtime(path) path

С другой стороны, получение дат создания файлов является неудобным и зависящим от платформы, отличающимся даже между тремя большими ОС:

  • В Windows файл ctime (задокументированный на https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx ) хранит дату создания. Вы можете получить доступ к этому в Python через os.path.getctime() или .st_ctime атрибут результата вызова os.stat() . Это не будет работать в Unix, где в ctime последний раз изменились атрибуты или содержимое файла .
  • На Mac , а также на некоторых других ОС на базе Unix вы можете использовать .st_birthtime атрибут результата вызова os.stat() .

В Linux это невозможно, по крайней мере, без написания расширения C для Python. Хотя некоторые файловые системы, обычно используемые с Linux , создают даты создания хранилища (например, ext4 сохраняет их st_crtime ), ядро ​​Linux не имеет доступа к ним ; в частности, структуры, которые он возвращает из stat() вызовов в C, начиная с последней версии ядра, не содержат полей даты создания . Вы также можете увидеть, что идентификатор в st_crtime настоящее время не присутствует нигде в источнике Python . По крайней мере , если вы на ext4 , данные в прикрепляются к дескрипторам в файловой системе, но нет удобного способа доступа к нему.

Следующей лучшей идеей в Linux является доступ к файлу mtime через либо os.path.getmtime() или .st_mtime атрибут os.stat() результата. Это даст вам последний раз, когда содержимое файла было изменено, что может быть достаточно для некоторых случаев использования.

Объединяя все это, кросс-платформенный код должен выглядеть примерно так .

623 плюса

У вас есть выбор. Например, вы можете использовать os.path.getmtime и os.path.getctime функции:

Другой вариант — использовать os.stat :

Примечание : ctime() это не относится к времени создания на * NIX систем, а последний раз , когда данные индексных дескрипторов изменились. (спасибо kojiro за то, что этот факт более ясен в комментариях, предоставив ссылку на интересный пост в блоге)

349 плюса

Лучшей функцией для этого является os.path.getmtime () . Внутри это просто используется os.stat(filename).st_mtime .

Модуль datetime — лучший способ создания временных меток, поэтому вы можете получить дату модификации как datetime объект:

46 плюса

edit: В более новом коде вы, вероятно, должны использовать os.path.getmtime () (спасибо Christian Oudard),
но обратите внимание, что он возвращает значение с плавающей запятой time_t с долей секунд (если ваша ОС поддерживает его)

37 плюса

Существует два способа получить время mod, os.path.getmtime () или os.stat (), но ctime не является надежной кросс-платформенной (см. Ниже).

os.path.getmtime ()

getmtime ( path )
Возвращает время последней модификации пути. Возвращаемое значение — это число, указывающее количество секунд с момента (см. Модуль времени). Поднимите os.error, если файл не существует или недоступен. Новое в версии 1.5.2. Изменено в версии 2.3: Если os.stat_float_times () возвращает значение True, результатом является число с плавающей запятой.

os.stat ()

stat ( path )
Выполните системный вызов stat () по данному пути. Возвращаемое значение — это объект, атрибуты которого соответствуют членам структуры stat, а именно: st_mode (бит защиты), st_ino (номер inode), st_dev (устройство), st_nlink (количество жестких ссылок), st_uid (идентификатор пользователя владельца ), st_gid (идентификатор группы владельца), st_size (размер файла, в байтах), st_atime (время последнего доступа), st_mtime (время последней модификации контента), st_ctime (зависит от платформы, время изменения последних метаданных в Unix или время создания в Windows) :

Как узнать дату и время создания и изменения файла в Python?

У меня есть скрипт, который должен делать некоторые вещи, основанные на датах создания и изменения файлов, но должен работать в Linux и Windows .

Какой лучший кроссплатформенный способ получить создание и изменение файлов date/times в Python ?

Получить какую-то дату модификации кроссплатформенным способом легко — просто позвоните, и вы получите метку времени Unix, когда файл был последний раз изменен. os.path.getmtime(path) path

Получение дат создания файла , с другой стороны, зависит от платформы и зависит даже от трех больших ОС:

  • В Windows файл ctime (задокументированный по адресу https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx ) хранит дату его создания. Вы можете получить доступ к этому в Python через os.path.getctime() или к .st_ctime атрибуту результата вызова os.stat() . Это не будет работать в Unix, где в ctime последний раз менялись атрибуты или содержимое файла .
  • На Mac , как и на некоторых других Unix-системах, вы можете использовать .st_birthtime атрибут результата вызова os.stat() .

В Linux это в настоящее время невозможно, по крайней мере без написания расширения C для Python. Хотя некоторые файловые системы, обычно используемые в Linux , хранят даты создания (например, ext4 хранят их в st_crtime ), ядро ​​Linux не предлагает никакого доступа к ним ; в частности, структуры, которые он возвращает из stat() вызовов в C, начиная с последней версии ядра, не содержат никаких полей даты создания . Вы также можете видеть, что этот идентификатор в st_crtime настоящее время отсутствует в источнике Python . По крайней мере , если вы на ext4 , данные в прикрепляются к дескрипторам в файловой системе, но нет удобного способа доступа к нему.

Следующая лучшая вещь на Linux является доступ к файлу mtime , либо через os.path.getmtime() или в .st_mtime атрибуте os.stat() результата. Это даст вам последний раз, когда содержимое файла было изменено, что может быть достаточно для некоторых случаев использования.

Собирая все это вместе, кросс-платформенный код должен выглядеть примерно так .

У вас есть несколько вариантов. С одной стороны , вы можете использовать os.path.getmtime и os.path.getctime функцию:

Другой вариант — использовать os.stat :

Примечание : ctime() это не относится к времени создания на * NIX систем, а последний раз , когда данные индексных дескрипторов изменились. (спасибо Кодзиро за разъяснение этого факта в комментариях, предоставив ссылку на интересную запись в блоге)

Работа с файлами в Python с помощью модуля OS

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

В индустрии программного обеспечения большинство программ тем или иным образом обрабатывают файлы: создают их, переименовывают, перемещают и так далее. Любой программист должен обладать таким навыком. С этим руководством вы научитесь использовать модуль os в Python для проведения операций над файлами и каталогами вне зависимости от используемой операционной системы.

Важно знать, что модуль os используется не только для работы с файлами. Он включает массу методов и инструментов для других операций: обработки переменных среды, управления системными процессами, а также аргументы командной строки и даже расширенные атрибуты файлов, которые есть только в Linux.

Модуль встроенный, поэтому для работы с ним не нужно ничего устанавливать.

Вывод текущей директории

Для получения текущего рабочего каталога используется os.getcwd() :

os.getcwd() возвращает строку в Юникоде, представляющую текущий рабочий каталог. Вот пример вывода:

Создание папки

Для создания папки/каталога в любой операционной системе нужна следующая команда:

После ее выполнения в текущем рабочем каталоге тут же появится новая папка с названием «folder».

Если запустить ее еще раз, будет вызвана ошибка FileExistsError , потому что такая папка уже есть. Для решения проблемы нужно запускать команду только в том случае, если каталога с таким же именем нет. Этого можно добиться следующим образом:

Функция os.path.isdir() вернет True , если переданное имя ссылается на существующий каталог.

Изменение директории

Менять директории довольно просто. Проделаем это с только что созданным:

Еще раз выведем рабочий каталог:

Создание вложенных папок

Предположим, вы хотите создать не только одну папку, но и несколько вложенных:

Это создаст три папки рекурсивно, как показано на следующем изображении:

Создание файлов

Для создания файлов в Python модули не нужны. Можно использовать встроенную функцию open() . Она принимает название файла, который необходимо создать в качестве первого параметра и желаемый режим открытия — как второй:

w значит write (запись), a — это appending (добавление данных к уже существующему файлу), а r — reading (чтение). Больше о режимах открытия можно почитать здесь.

Переименование файлов

С помощью модуля os достаточно просто переименовать файл. Поменяем название созданного в прошлом шаге.

Функция os.rename() принимает 2 аргумента: имя файла или папки, которые нужно переименовать и новое имя.

Перемещение файлов

Функцию os.replace() можно использовать для перемещения файлов или каталогов:

Стоит обратить внимание, что это перезапишет путь, поэтому если в папке folder уже есть файл с таким же именем ( renamed-text.txt ), он будет перезаписан.

Список файлов и директорий

Функция os.listdir() возвращает список, который содержит имена файлов в папке. Если в качестве аргумента не указывать ничего, вернется список файлов и папок текущего рабочего каталога:

А что если нужно узнать состав и этих папок тоже? Для этого нужно использовать функцию os.walk() :

os.walk() — это генератор дерева каталогов. Он будет перебирать все переданные составляющие. Здесь в качестве аргумента передано значение «.», которое обозначает верхушку дерева:

Метод os.path.join() был использован для объединения текущего пути с именем файла/папки.

Удаление файлов

Удалим созданный файл:

os.remove() удалит файл с указанным именем (не каталог).

Удаление директорий

С помощью функции os.rmdir() можно удалить указанную папку:

Для удаления каталогов рекурсивно необходимо использовать os.removedirs() :

Это удалит только пустые каталоги.

Получение информации о файлах

Для получения информации о файле в ОС используется функция os.stat() , которая выполняет системный вызов stat() по выбранному пути:

Это вернет кортеж с отдельными метриками. В их числе есть следующие:

    • st_size — размер файла в байтах
    • st_atime — время последнего доступа в секундах (временная метка)
    • st_mtime — время последнего изменения
    • st_ctime — в Windows это время создания файла, а в Linux — последнего изменения метаданных

Для получения конкретного атрибута нужно писать следующим образом:

На этой странице больше об атрибутах.

Выводы

Работать с файлами и каталогами в Python очень просто. Не имеет значения даже используемая операционная система, хотя отдельные уникальные для системы функции можно использовать: например, os.chown() или os.chmod() в Linux. Более подробно эта тема освещена в официальной документации Python.

Подписывайтесь на канал в Дзене

Полезный контент для начинающих и опытных программистов в канале Лента Python разработчика — Как успевать больше, делать лучше и не потерять мотивацию.

Как узнать дату и время создания и изменения файла в Python?

У меня есть сценарий, который должен делать некоторые вещи, основанные на датах создания и изменения файлов, но должен работать в Linux и Windows.

Какой лучший кроссплатформенный способ получить дату и время создания и изменения файлов в Python?

12 ответов

Получить какую-то дату модификации кроссплатформенным способом легко — просто позвоните os.path.getmtime(path) и вы получите метку времени Unix, когда файл в path был последний изменен.

Получение дат создания файла, с другой стороны, зависит от платформы и зависит даже от трех больших ОС:

  • В Windows файл ctime (задокументировано по адресу https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) хранит дату его создания. Вы можете получить доступ к этому в Python через os.path.getctime() или .st_ctime атрибут результата вызова os.stat() , Это не будет работать на Unix, где ctime это последний раз, когда атрибуты файла или содержимое были изменены.
  • На Mac, а также на некоторых других ОС Unix вы можете использовать .st_birthtime атрибут результата вызова os.stat() ,

В Linux это в настоящее время невозможно, по крайней мере без написания расширения C для Python. Хотя некоторые файловые системы, обычно используемые в Linux , хранят даты создания (например, ext4 хранит их в st_crtime ) ядро ​​Linux не предлагает никакого доступа к ним; в частности, структуры, из которых он возвращается stat() вызовы в C, начиная с последней версии ядра, не содержат полей даты создания. Вы также можете увидеть, что идентификатор st_crtime в настоящее время нет нигде в исходном коде Python. По крайней мере, если вы на ext4 данные прикрепляются к индексам в файловой системе, но удобного способа доступа к ним нет.

Следующая лучшая вещь в Linux — это доступ к файлу mtime через либо os.path.getmtime() или .st_mtime атрибут os.stat() результат. Это даст вам последний раз, когда содержимое файла было изменено, что может быть достаточно для некоторых случаев использования.

Собирая все это вместе, кроссплатформенный код должен выглядеть примерно так.

У вас есть пара вариантов. Например, вы можете использовать os.path.getmtime а также os.path.getctime функции:

Другой вариант — использовать os.stat :

Примечание: ctime() не относится ко времени создания в системах *nix, а скорее в последний раз, когда данные inode менялись. (спасибо Кодзиро за разъяснение этого факта в комментариях, предоставив ссылку на интересную запись в блоге)

Читайте также:  Отображение сетевого окружения windows 10
Оцените статью