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


Этот вопрос отредактирован с добавлением новой информации ниже:


Я нахожусь на машине с Windows 7, используя Cygwin... и у меня установлены Python 2.6 и 3.1.

Я могу видеть следующее, используя мой короткий скрипт python.. для времени создания, времени изменения, времени доступа и времени создания, используя stat.

Но проблема в том, что... Свойства файла Windows 7 показывают время создания как 12.11.2010 11:57:54.

Мой вопрос: как я могу вернуть время создания Windows в скрипте Python.

Повторяю, я не хочу, чтобы fctime возвращалось в приведенном ниже сценарии. Это НЕ то же самое, что время создания Windows.

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

Да... и я прочитал документацию по os.stat... и там написано:

st_ctime (зависит от платформы; время последнего изменения метаданных в Unix или время создания в Windows):

$ python /tmp/python/filemodified.py marksix.py
marksix.py
fctime: 11/12/2010 22:58:25
fmtime: 11/12/2010 22:57:01 (windows shows 22:57:01 ok)
fatime: 11/12/2010 22:45:21 (windows shows 22:45:21 ok)
fctimestat: Sat Dec 11 22:58:25 2010 (same as above fctime)
fsize: 1765

кое-что, связанное с этой публикацией: Получить время создания файла с помощью Python на Mac< /а>

Вот мой полный скрипт:

import sys
import os
import time

for f in sys.argv[1:]:
    if os.path.exists(f):

        fname = f
        fctime = time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getctime(fname)))
        fmtime =  time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getmtime(fname)))
        fatime =  time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getatime(fname)))
        fsize = os.path.getsize(fname)
        #print "size = %0.1f kb" % float(fsize/1000.0)
        fctimestat = time.ctime(os.stat(fname).st_ctime)

        print fname + '\nfctime: ' + fctime + '\nfmtime: ' + fmtime + '\nfatime: ' + fatime + '\n',
        print 'fctimestat: ' + fctimestat + '\n',
        print 'fsize:', fsize,
        print

Дополнительная информация:

Теперь... я нахожусь в своей рабочей среде... поэтому я не могу использовать тот же файл, что и раньше... но в любом случае я тестировал с помощью cygwin python (2.6.5) и windows python (2.6.6)... и результаты отличаются.. как видно ниже.

Первый — это cygwin Python, а второй — Windows Python. И Windows Python соответствует свойствам файла ... Итак, это нормально? Почему cygwin python должен получать тот же набор дат, что и Windows?

User@COMP /tmp/pythonscr
$ python file_time.py ../testjpg.gif
../testjpg.gif
fctime: 05/01/2011 10:25:52
fmtime: 05/01/2011 10:25:52
fatime: 01/12/2010 17:30:16
fctimestat: Wed Jan  5 10:25:52 2011
fsize: 1536
------


User@COMP /tmp/pythonscr
$ /cygdrive/c/Python26/python.exe file_time.py ../testjpg.gif
../testjpg.gif
fctime: 01/12/2010 17:30:16
fmtime: 05/01/2011 10:25:52
fatime: 01/12/2010 17:30:16
fctimestat: Wed Dec 01 17:30:16 2010
fsize: 1536
------

person ihightower    schedule 04.01.2011    source источник
comment
@nosklo: Он говорит о разнице менее минуты, помогает ли знание часового пояса ответить на этот вопрос?   -  person Steven Rumbalski    schedule 04.01.2011
comment
я не знаю, поможет ли это .. мой часовой пояс UTC + 7.   -  person ihightower    schedule 04.01.2011
comment
На моем компьютере с Windows 7 без Cygwin ваш скрипт дает точное время.   -  person Steven Rumbalski    schedule 04.01.2011
comment
На моем компьютере с Windows XP без Cygwin вывод вашего скрипта соответствует свойствам файла, сообщенным системой.   -  person martineau    schedule 04.01.2011
comment
Я добавил дополнительные комментарии к моему исходному вопросу. Пожалуйста, смотрите конец вопроса. Да .. Теперь я вижу, что без cygwin свойства файла, сообщаемые системой, совпадают с вашими, ребята. Но зачем тогда Cygwin сообщать о разнице. Это нормально? и ожидаемое поведение!!   -  person ihightower    schedule 05.01.2011
comment
Cygwin, вероятно, пытается эмулировать поведение Unix и поэтому возвращает время изменения, как задокументировано. К сожалению, поскольку у Posix нет времени создания в stat (о котором я знаю), вам не повезло. Попробуйте ntpath.getctime, если он у вас есть.   -  person Emilio Silva    schedule 05.01.2011


Ответы (1)


Я попытался сделать это еще раз дома... используя 1) cygwin python 2.6 и 2) windows python 3.1 в одном и том же файле... и как с ntpath, так и с os.path

Вывод таков: результаты windows python 3.1 совпадают со свойствами Windows все 3 раза.

Для cygwin python время создания не соответствует свойствам Windows ... при использовании как ntpath, так и os.path ... другие в порядке и совпадают.

Вот результаты:

Результаты Cygwin Python 2.6.5

os.path

>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getctime(fname)))
'11/12/2010 22:58:25'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getmtime(fname)))
'11/12/2010 22:57:01'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getatime(fname)))
'11/12/2010 22:45:21'

ntpath

>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(ntpath.getctime(fname)))
'11/12/2010 22:58:25'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(ntpath.getmtime(fname)))
'11/12/2010 22:57:01'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(ntpath.getatime(fname)))
'11/12/2010 22:45:21'

Результаты Windows Python 3.1

os.path

>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getctime(fname)))
'11/12/2010 11:57:54'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getmtime(fname)))
'11/12/2010 22:57:01'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(os.path.getatime(fname)))
'11/12/2010 22:45:21'

ntpath

>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(ntpath.getctime(fname)))
'11/12/2010 11:57:54'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(ntpath.getmtime(fname)))
'11/12/2010 22:57:01'
>>> time.strftime("%d/%m/%Y %H:%M:%S",time.localtime(ntpath.getatime(fname)))
'11/12/2010 22:45:21'
person ihightower    schedule 05.01.2011