似乎无法在Python中的相同脚本中使用导入时间和导入日期时间

时间:2012-06-26 16:18:32

标签: python datetime time sleep

我在Windows上使用Python 2.7,我正在编写一个使用时间和日期时间模块的脚本。我以前做过这个,但是python似乎对于加载两个模块以及之前使用过的方法似乎并不敏感。以下是我使用的不同语法以及我目前遇到的错误。

首先我尝试了:

from datetime import *
from time import *
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
else: time.sleep(60)

ERROR:

else: time.sleep(60) AttributeError: 'builtin_function_or_method' object has no attribute 'sleep'

然后我尝试了:

from datetime import *
from time import *
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

我没有错误,但也没有睡眠延迟。

接下来我尝试了:

from datetime import *
import time
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

ERROR:

filetime = localtime(filetimesecs) NameError: name 'localtime' is not defined

另一个修改,我尝试了这个:

import time
import datetime
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

ERROR

checktime = datetime.today() - timedelta(days=int(2)) AttributeError: 'module' object has no attribute 'today'

最后,我尝试了这个:

import time
from datetime import *
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

ERROR:

checktime = datetime.today() - timedelta(days=int(2)) AttributeError: 'module' object has no attribute 'today'

所以我不确定如何让这两个模块很好地发挥。或者我需要另一种方法来延迟脚本。

连连呢?或指出我犯的错误?

感谢。

8 个答案:

答案 0 :(得分:15)

您可以在导入时间时使用作为

import time as t
from datetime import datetime
...
t.sleep(2)

答案 1 :(得分:9)

不要使用from ... import * - 这是交互式使用的便捷语法,会导致脚本混乱。

下面'应该有效的版本:

import time
import datetime
...
checktime = datetime.datetime.today() - datetime.timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = time.localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

使用import <modulename>导入模块时,您当然需要为这些模块中的所有名称使用完全限定名称

答案 2 :(得分:3)

我猜你的from something import *会产生冲突。

由于datetime导出time类,因此可能与time模块冲突。

结论:不要使用import *; - )

答案 3 :(得分:2)

永远不要使用from x import *形式的导入,因为您不知道自己会得到什么。在这种情况下,第二个导入是从第一个导入中删除一些符号,因为它们具有相同的名称。

使用import x并使用x.y限定您在该模块中使用的所有内容,或仅使用from x import y导入所选项目。

答案 4 :(得分:2)

这两个模块用sasme名称定义了一些函数/类型。最好的方法是明确导入它们并使用您需要的东西:

import datetime
import time
datetime.datetime.today() # Datetime object for today
time.time() # Current time

更一般地说,您不能期望盲目地在from x import *import x之间切换。您需要查看每个库的文档以确定要使用的函数。

答案 5 :(得分:1)

进行导入时可能会出现名称冲突*。我强烈建议不要这样做。

import time
import datetime

.
.
.
.

time.sleep(60)

如果您不希望使用time.datetime.

添加所有功能,也可以执行以下操作
from datetime import X, Y
from time import Z, W

X.something()
... etc ...

答案 6 :(得分:0)

正如以上评论中每个人正确提到的那样,此问题是由于:

from datetime import *

但是我遇到了一个问题,我将其写到文件中并尝试运行,并且由于无法正常工作,我从该文件中删除了整个导入语句,但是当我再次尝试运行它时,它仍然陷入困境错误。令人惊讶的是,当一条语句根本不在文件中时,它将如何导致错误? 但是经过一些调试后,我意识到同一条语句位于其他相互依赖的文件中,因此也出现了错误。

因此,我想说的是,如果错误仍然存​​在,请检查项目中的所有文件是否存在此语句,然后将其替换为要导入的特定模块,例如:

from datetime import datetime, timedelta

希望这会有所帮助!

答案 7 :(得分:-2)

你可以让它变得简单

from datetime import *

from time import *