似乎无法在 Python 的同一脚本中使用导入时间和导入日期时间
Posted
技术标签:
【中文标题】似乎无法在 Python 的同一脚本中使用导入时间和导入日期时间【英文标题】:Cannot seem to use import time and import datetime in same script in Python 【发布时间】:2012-06-28 00:37:03 【问题描述】:我在 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'
所以我不确定如何让这两个模块很好地发挥作用。或者我需要另一种方法来延迟脚本。
建议?或者指出我犯的错误?
谢谢。
【问题讨论】:
好的,我一直在编码和测试,而你们一直在回答(谢谢!)。这就是我将导入行更改为“从时间导入时间,睡眠,本地时间从日期时间导入日期时间,timedelta”,这使得除了睡眠语句之外的一切都可以工作。如果我使用 'time.sleep(60)' 我得到 AttributeError: 'builtin_function_or_method' 对象没有属性 'sleep' 但如果我使用 'time.time.sleep(60)' 我得到相同错误。 好的,我一直在编码和测试,而你们一直在回答(谢谢!)。这是我将导入行更改为: from time import time, sleep, localtime from datetime import datetime, timedelta 这使得除了 sleep 语句之外的所有内容都可以工作。在使用 'time.sleep(60)' 然后 'time.time.sleep(60)' 之后,最终起作用的是 'sleep(60)' 相关:python “import datetime” v.s. “from datetime import datetime”。还有datetime.time
类。
【参考方案1】:
永远不要使用from x import *
形式的导入,因为你不知道你会得到什么。在这种情况下,第二次导入会从第一次导入中删除一些符号,因为它们具有相同的名称。
要么使用import x
并使用x.y
限定您在该模块中使用的所有内容,或者使用from x import y
仅导入选定的项目。
【讨论】:
【参考方案2】:不要使用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>
导入模块时,当然需要为这些模块中的所有名称使用完全限定名称
【讨论】:
【参考方案3】:我的猜测是你有冲突是因为你的from something import *
。
由于datetime
导出time
类,这可能与time
模块冲突。
结论:不要使用import *
;-)
【讨论】:
【参考方案4】:当你只做 import *.我强烈建议不要这样做。
import time
import datetime
.
.
.
.
time.sleep(60)
如果您不想在所有函数前面加上time.
或datetime.
,也可以执行以下操作
from datetime import X, Y
from time import Z, W
X.something()
... etc ...
【讨论】:
没有time.time.sleep()
。只是time.sleep()
。【参考方案5】:
这两个模块使用 sasme 名称定义了一些函数/类型。最好的方法是显式导入它们并使用你需要的东西:
import datetime
import time
datetime.datetime.today() # Datetime object for today
time.time() # Current time
更一般地说,您不能期望在from x import *
和import x
之间盲目切换。您需要查看每个库的文档来决定要使用哪些功能。
【讨论】:
【参考方案6】:您可以在导入时间时使用as。
import time as t
from datetime import datetime
...
t.sleep(2)
【讨论】:
这是最简单、最好、最简单的解决方案。 这是一个hack时间,从datetime导入时间与导入时间冲突【参考方案7】:正如上面 cmets 中每个人都正确提到的那样,这个问题是由于:
from datetime import *
但是我遇到了一个问题,我将它写在一个文件中并尝试运行,由于它不起作用,我从该文件中删除了整个导入语句,但是当我尝试再次运行它时,它仍然是一样的错误。这很令人惊讶,因为当一个语句根本不在文件中时,它怎么会导致错误呢? 但是经过一些调试后,我意识到同样的语句在其他一些相互依赖的文件中,因此出现了错误。
所以,我想说的是,如果错误仍然存在,请检查项目中的所有文件是否有此语句,并将它们替换为要导入的特定模块,例如:
from datetime import datetime, timedelta
希望这会有所帮助!
【讨论】:
【参考方案8】:你可以让它变得简单
from datetime import *
from time import *
【讨论】:
这是已经 OP 在问题中所做的,使用from X import *
,这导致了错误。这就是为什么正如其他答案中提到的那样,尽可能避免import *
。见Why is “import *” bad?。以上是关于似乎无法在 Python 的同一脚本中使用导入时间和导入日期时间的主要内容,如果未能解决你的问题,请参考以下文章
无法在Snakemake规则中使用conda环境导入python模块
已安装包(Python PIL/Pillow)但我无法导入它