2012-06-26 152 views
5

我在Windows上使用Python 2.7,並且正在編寫同時使用時間和日期時間模塊的腳本。我以前做過這個,但是python似乎對加載這兩個模塊和我之前使用的方法似乎沒有工作都很敏感。這裏是我使用的不同的語法和我目前得到的錯誤。似乎無法在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 

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 

錯誤:

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

所以我不知道如何讓這兩個模塊很好地發揮。或者我需要另一種方法來延遲腳本。

對此提出建議?或者指出我犯的錯誤?

謝謝。

+0

好吧,我一直在編碼和測試,而你們一直在回答(謝謝!)。以下是我將導入行更改爲'從導入時間,睡眠,本地時間 from datetime import datetime,timedelta',它使所有的東西都可以工作,除了sleep語句。如果我使用'time.sleep(60)',我得到_AttributeError:'builtin_function_or_method'對象沒有'sleep'屬性,但是如果我使用'time.time.sleep(60)',我會得到相同的錯誤。 – user1070061

+0

好吧,我一直在編碼和測試,而你們一直在回答(謝謝!)。以下是我將導入行更改爲: from time import time,sleep,localtime from datetime import datetime,timedelta 它使所有的東西都可以工作,除了sleep語句。在'time.sleep(60)'和'time.time.sleep(60)'之後,最後的工作是'sleep(60)' – user1070061

+0

相關:[python「import datetime」v.s. 「從datetime導入日期時間」](http://stackoverflow.com/q/15707532/4279)。還有'datetime.time'類。 – jfs

回答

2

千萬不要使用from x import *這種形式的進口,因爲你不知道你會得到什麼。在這種情況下,第二次導入將從第一次導入中刪除一些符號,因爲它們具有相同的名稱。

可以使用import x並使用x.y限定您在該模塊中使用的所有內容,也可以僅導入選定的項目與from x import y

8

請勿使用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 * ;-)

1

可以有名稱衝突時,你只是做進口*。我強烈建議不要這樣做。

import time 
import datetime 

. 
. 
. 
. 

time.sleep(60) 

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

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

X.something() 
... etc ... 
+0

沒有'time.time.sleep()'。這只是'time.sleep()'。 –

+0

哎呀,我的壞... – varunl

2

這兩個模塊定義一些功能/類型與SASME名稱。最好的辦法是明確地導入和使用你所需要的:

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

更一般地,你不能只是指望from x import *import x之間盲目切換。您需要查看每個庫的文檔以確定要使用的功能。

7

您可以在導入時使用作爲

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

這是最簡單,最好,最簡單的解決方案。 –

相關問題