2012-06-26 14 views
5

Sto usando Python 2.7 su Windows e sto scrivendo uno script che utilizza sia i moduli time che datetime. L'ho già fatto prima, ma python sembra essere un po 'preoccupato di avere entrambi i moduli caricati e i metodi che ho usato prima non sembrano funzionare. Ecco la diversa sintassi che ho usato e gli errori che sto ottenendo attualmente.Sembra non usare il tempo di importazione e importare datetime nello stesso script in Python

Per prima cosa ho provato:

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) 

ERRORE:

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

Poi ho provato:

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 

e ho avuto nessun errore, ma nessun ritardo sonno neanche.

successivo ho provato:

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 

ERRORE:

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

Un'altra modifica e ho provato questo:

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'

Infine, ho provato questo:

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 

ERRORE:

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

, quindi non sono sicuro di come ottenere i due moduli di giocare bene. O ho bisogno di un altro metodo per ritardare lo script.

Suggerimenti? O puntatori agli errori che ho fatto?

Grazie.

+0

OK, ho programmato e testato mentre voi ragazzi avete risposto (GRAZIE!). Ecco cosa ho modificato le righe di importazione in "dall'ora di importazione, sospensione, ora locale dall'ora di data/ora datetime, timedelta" che abilita tutto a funzionare tranne l'istruzione sleep. Se uso 'time.sleep (60)' ottengo _AttributeError: 'builtin_function_or_method' oggetto non ha attributo 'sleep'_ ma se utilizzo' time.time.sleep (60) 'Ricevo lo stesso errore. – user1070061

+0

OK, ho programmato e testato mentre voi ragazzi avete risposto (GRAZIE!). Ecco cosa ho modificato le righe di importazione in: dall'ora di importazione in tempo, inattivo, ora locale dall'ora di data/ora datetime, timedelta che abilita tutto a funzionare tranne l'istruzione sleep. Dopo aver passato del tempo con 'time.sleep (60)' poi 'time.time.sleep (60)', ciò che ha funzionato alla fine è stato 'sleep (60)' – user1070061

+0

correlato: [python "import datetime" v.s. "Da datetime import datetime"] (http://stackoverflow.com/q/15707532/4279). Inoltre c'è la classe 'datetime.time'. – jfs

risposta

2

Non utilizzare mai le importazioni del modulo from x import * perché non si sa cosa si otterrà. In questo caso la seconda importazione sta cancellando alcuni simboli dalla prima importazione perché hanno lo stesso nome.

O utilizzare import x e qualificare tutto ciò che si utilizza da quel modulo con x.y o importare solo gli elementi selezionati con from x import y.

8

Non utilizzare from ... import * - questa è una sintassi di comodità per l'uso interattivo e causa confusione negli script.

Qui' una versione che dovrebbe funzionare:

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 

Quando si importano i moduli tramite import <modulename>, è ovviamente necessario utilizzare nomi completi per tutti i nomi di questi moduli

3

La mia ipotesi è che si avere conflitti a causa del tuo from something import *.

Poiché datetime esporta una classe time, questo potrebbe entrare in conflitto con il modulo time.

Conclusione: non utilizzare import * ;-)

1

Non ci possono essere conflitti di nomi in cui proprio non importare *. Consiglio vivamente di non farlo.

import time 
import datetime 

. 
. 
. 
. 

time.sleep(60) 

È inoltre possibile effettuare le seguenti operazioni se non si vuole anteporre tutte le funzioni con time. o datetime.

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

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

Non c'è 'time.time.sleep()'. È solo 'time.sleep()'. –

+0

Oops, my bad ... – varunl

2

Questi due moduli definiscono alcune funzioni/tipi con i nomi sasme. Il modo migliore è quello di importare in modo esplicito e utilizzare quello che vi serve:

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

Più in generale, non si può semplicemente aspettare per passare alla cieca tra le from x import * e import x. È necessario consultare la documentazione di ciascuna libreria per decidere quali funzioni si desidera utilizzare.

7

È possibile utilizzare come durante l'importazione del tempo.

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

Questa è la soluzione più semplice, migliore e più semplice. –

Problemi correlati