2015-02-01 1 views
2

Я изучаю Python (версия 2.7.9 на win8) и в настоящее время просматриваю различные модули date и time. Я не могу получить последнее измененное время файла, используя ctime. Я столкнулся эту ошибку:Python - невозможно использовать ctime для получения последнего измененного времени

AttributeError: type object 'datetime.time' has no attribute 'ctime' 

Вот мои импорт:

import os 
from os import path 
from datetime import date,time, timedelta 
from datetime import datetime 

Сценарий:

modTime = time.ctime(os.path.getmtime("t.txt")) 
print "t.txt was last modified at: " + modTime # This Doesn't work 

print datetime.fromtimestamp(path.getmtime("t.txt")) # This works 

ответ

3

Сообщение об ошибке совершенно ясно: datetime.time has no attribute 'ctime'. Но модуль time имеет функцию ctime. Вы затеняете модуль time по линии from datetime import time.

>>> import time 
>>> time # refers to the *module* 
<module 'time' from '/usr/lib/python2.7/lib-dynload/time.so'> 
>>> time.ctime() 
'Sun Feb 1 16:23:33 2015' 
>>> from datetime import time 
>>> time # now we have a class of that name 
<type 'datetime.time'> 
>>> t = time() 
>>> t.isoformat() 
'00:00:00' 
2

Вот исправленный импорт:

import os 
from os import path 
import time 
from datetime import datetime 
3

Другие ответы правильны, но они не дают вам хороший совет о том, как использовать импорт, который не использовать «от» и вместо того, чтобы использовать полностью квалифицированные имена, согласно PEP8:

It's much better to:

  • reference names through their module (fully qualified identifiers),
  • import a long module using a shorter name (alias; recommended),
  • or explicitly import just the names you need.

Я следую # 1 или # 2, и никогда не # 3, по той причине, ваша программа не работает:

import os 
import time 

modTime = time.ctime(os.path.getmtime("t.txt")) 
print "t.txt was last modified at: " + modTime # This works now! 

Пример # 2:

import time 
from datetime import time as dt_time 

time. так значит, что-то из time модуля и dt_time функция datetime.time(), а имя неоднозначность устраняется.

Несомненно, люди не согласятся с этим, поскольку это слишком педантично, но это избавляет вас от проблем с импортом.

+0

Спасибо за объяснение. Не могли бы вы подробнее остановиться на №2 и почему люди не согласятся с педантичным отношением? – undroid

+0

IMHO (и в соответствии с PEP8, пожалуйста, исправьте ссылку :)) 'from x import y' ОК, вы просто не должны делать' из x import * '. – Jasper

+0

@undroid там у вас есть пример разных мнений о том, как использовать импорт. это было именно «от x import y», что привело вас к неприятностям. – rbp

0

на самом деле я пытался его использовать версию 3.5 и смотрел учебник о модуле на ютубе время, когда преподаватель, используя 2,7 maybe.here является код:

from datetime import datetime, time, timedelta 
c = time.ctime(os.path.getmtime("file")) 
print(c) 

, но на самом деле я получил пост выше ошибки и право код:

import time 
c = time.ctime(os.path.getmtime("file")) 

, потому что в python3.5 время является отдельным модулем и не в то время даты module.and здесь является фрагментом времени исходного модуля кода. actually a build-in module