スクリプトのさまざまな行で次を実行する必要があるスクリプトがあります。
today_date = datetime.date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
インポートステートメントには、次のものがあります。
from datetime import datetime
import datetime
次のエラーが表示されます。
AttributeError: 'module' object has no attribute 'strp'
インポートステートメントの順序を次のように変更した場合:
import datetime
from datetime import datetime
次のエラーが表示されます。
AttributeError: 'method_descriptor' object has no attribute 'today'
インポートステートメントを再度変更した場合:
import datetime
次のエラーが表示されます。
AttributeError: 'module' object has no attribute 'strp'
ここで何が起こっており、両方を機能させるにはどうすればよいですか?感謝します。ありがとうございました。
あなたの問題は、datetime
がdatetime
moduleおよびその他への参照であることを期待しているコードがあることです。 datetime
がdatetime
クラスへの参照であることを期待しているコード。明らかに両方ではない。
行うとき:
_from datetime import datetime
import datetime
_
最初にdatetime
をクラスへの参照に設定し、次にすぐにモジュールへの参照に設定します。逆に行うと同じことですが、最終的にクラスへの参照になります。
これらの参照のいずれかの名前を変更する必要があります。例えば:
_import datetime as dt
from datetime import datetime
_
次に、モジュールを参照する_datetime.xxxx
_という形式の参照を_dt.xxxx
_に変更できます。
または、単に_import datetime
_し、すべての参照を変更してモジュール名を使用します。言い換えれば、何かがdatetime(...)
とだけ言っている場合、その参照を_datetime.datetime
_に変更する必要があります。
残念ながら、Pythonのライブラリにはこの種のものがかなりあります。 PEP 8 の独自の命名ガイドラインに従った場合、datetime
クラスの名前はDatetime
になり、datetime
の両方を使用しても問題はありません。モジュールを意味し、Datetime
はクラスを意味します。
両方のステートメントを使用することはできません。 datetime
モジュールにはdatetime
typeが含まれます。独自モジュールのローカル名datetime
は、どちらか一方のみを参照できます。
onlyimport datetime
を使用し、常にdatetime.datetime
を使用して、含まれている型を参照するようにします。
import datetime
today_date = datetime.date.today()
date_time = datetime.datetime.strptime(date_time_string, '%Y-%m-%d %H:%M')
これでdatetime
がモジュールになり、そこから含まれている型を参照します。
または、モジュールから必要なタイプをインポートall:
from datetime import date, datetime
today_date = date.today()
date_time = datetime.strptime(date_time_string, '%Y-%m-%d %H:%M')
ここで、datetime
はモジュールの型です。 date
は、同じモジュールの別のタイプです。
datetime
は、datetime
とも呼ばれるタイプを含むモジュールです。両方を使用したいようですが、両方を参照するために同じ名前を使用しようとしています。タイプとモジュールは2つの異なるものであり、プログラムでdatetime
という名前で両方を参照することはできません。
(明らかにそうであるように)datetime
タイプ以外のモジュールから何かを使用する必要がある場合は、import datetime
でモジュールをインポートする必要があります。その後、「日付」タイプをdatetime.date
として、日時タイプをdatetime.datetime
として参照できます。
これを行うこともできます:
from datetime import datetime, date
today_date = date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
ここでは、必要な名前(日時と日付タイプ)のみをインポートし、それらを直接インポートするため、モジュール自体を参照する必要はまったくありません。
最終的には、使用する必要のあるモジュールの名前と、それらの最適な使用方法を決定する必要があります。モジュールから1つまたは2つのもの(たとえば、date
およびdatetime
タイプのみ)のみを使用している場合、それらの名前を直接インポートしてもかまいません。多くのものを使用している場合は、モジュールをインポートし、ドット構文を使用してその中にあるものにアクセスし、グローバルな名前空間が日付固有の名前で乱雑にならないようにする方がよいでしょう。
また、モジュール名自体をインポートする場合は、名前を短くして入力しやすくすることもできます。
import datetime as dt
today_date = dt.date.today()
date_time = dt.datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
Datetime import datetimeと通常のimport datetimeとの違いは、あるモジュールを処理し、別のクラスを処理することです。
Strptime関数はdatetimeクラスにのみ存在するため、モジュールと共にクラスをインポートする必要があります。そうでない場合、この関数を呼び出すときにdatetimeを2回指定する必要があります。
ここで重要なのは、クラス名とモジュール名に同じ名前が付けられているため、少し混乱を招くことです。
from datetime import datetime,timedelta
today=datetime.today()
print("Todays Date:",today)
yesterday=today-datetime,timedelta(days=1)
print("Yesterday date:",yesterday)
tommorrow=today+datetime.timedelta(days=1)
print("Tommorrow Date:",tommorrow)
これを試して:
import datetime
from datetime import datetime as dt
today_date = datetime.date.today()
date_time = dt.strptime(date_time_string, '%Y-%m-%d %H:%M')
strp()は存在しません。 strptimeを意味すると思います。