В Python: Как вернуть «Windows» время создания файла? - PullRequest
1 голос
/ 04 января 2011

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


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

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

Но проблема в том, что ... Windows 7В свойствах файла отображается «Созданное время» как 11/12/2010 11:57:54 .

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

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

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

Да .. и япрочитал документацию для 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
------

1 Ответ

1 голос
/ 05 января 2011

Я попытался сделать это еще раз дома .. используя 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'
...