14

私は Windows で Python 2.7 を使用しており、time モジュールと datetime モジュールの両方を使用するスクリプトを作成しています。私は以前にこれを行ったことがありますが、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'

そのため、2 つのモジュールをうまく動作させる方法がわかりません。または、スクリプトに遅延を入れる別の方法が必要です。

提案?または私が犯した間違いへのポインタ?

ありがとう。

4

9 に答える 9

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

これら 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 に答える
2

from x import *何が得られるかわからないため、フォームのインポートを使用しないでください。この場合、2 番目のインポートでは、最初のインポートからいくつかのシンボルが削除されます。これらのシンボルは同じ名前を持つためです。

import xそのモジュールから使用するすべてを で使用して修飾するかx.y、 で選択した項目のみをインポートしfrom x import yます。

于 2012-06-26T16:21:22.930 に答える
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 に答える