14

我在 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)

错误:

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

错误:

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

错误

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

错误:

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

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

建议?或者指出我犯的错误?

谢谢。

4

9 回答 9

27

您可以在导入时间时使用as 。

import time as t
from datetime import datetime
...
t.sleep(2)
于 2015-12-31T09:19:52.570 回答
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>,您当然需要对这些模块中的所有名称使用完全限定名称

于 2012-06-26T16:22:03.687 回答
4

我的猜测是你有冲突是因为你的from something import *.

由于datetime导出一个time类,这可能与time模块冲突。

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

于 2012-06-26T16:22:38.630 回答
2

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

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

于 2012-06-26T16:21:22.930 回答
2

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

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

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

于 2012-06-26T16:25:19.700 回答
1

当你只做 import *. 我强烈建议不要这样做。

import time
import datetime

.
.
.
.

time.sleep(60)

如果您不想在所有功能前面加上time.or ,也可以执行以下操作datetime.

from datetime import X, Y
from time import Z, W

X.something()
... etc ...
于 2012-06-26T16:24:57.880 回答
0
from time import *
import time as t
from datetime import *
import datetime as dt

secs=69
print (dt.timedelta(seconds=secs))
now = datetime.now()

#Time
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time) 

#converting
conversion = dt.timedelta(seconds=secs)
print("Converted: ", conversion)

#sleep function
t.sleep (3)
print("DONE!")
于 2022-03-04T17:31:17.310 回答
0

正如上面评论中正确提到的那样,这个问题是由于:

from datetime import *

但是我遇到了一个问题,我将它写在一个文件中并尝试运行,由于它不起作用,我从该文件中删除了整个导入语句,但是当我尝试再次运行它时,它仍然出现同样的错误。这令人惊讶,因为当一个语句根本不在文件中时,它怎么会导致错误?但是经过一些调试后,我意识到同样的语句在其他一些相互依赖的文件中,因此出现了错误。

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

from datetime import datetime, timedelta

希望这可以帮助!

于 2020-07-01T15:13:21.650 回答
-2

你可以让它变得简单

from datetime import *

from time import *
于 2021-08-06T18:57:09.627 回答