私は dateutil
モジュール in Python 2.7.3。を使いました。
import dateutil
dateutil.parser.parse("01-02-2013")
しかし、エラーが発生しました:
AttributeError: 'module' object has no attribute 'parser'
dateutil
doesが持つ属性を確認しました。
print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
# '__name__', '__package__', '__path__', '__version__']
問題は、parser
からdateutil
を直接インポートしようとすると、存在するように見えることです。
from dateutil import parser
print parser.parse("01-02-2013")
# output: 2013-01-02 00:00:00
後に from dateutil import parser
、parser
は、インポートされたdateutil
自体にも魔法のように現れています。
print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
# '__name__', '__package__', '__path__', '__version__', 'parser',
# 'relativedelta', 'tz']
このリストには、他の属性(rrule
など)がまだないことに注意してください。
誰が何が起こっているのか知っていますか?
dateutil.parser
をインポートしていません。あなたはそれを見ることができますが、あなたはhave何らかの形でそれをインポートします。
>>> import dateutil.parser
>>> dateutil.parser.parse("01-02-2013")
datetime.datetime(2013, 1, 2, 0, 0)
parser.py
はdateutil
パッケージ内のモジュールだからです。フォルダー構造内の別のファイルです。
コメントで尋ねた質問への回答、from dateutil import parser
の後にrelativedelta
とtz
が名前空間に表示される理由は、parser
自体がインポートするためですrelativedelta
およびtz
。
dateutil/parser.py
のソースコードを見ると、インポートを確認できます。
# -*- coding:iso-8859-1 -*-
"""
Copyright (c) 2003-2007 Gustavo Niemeyer <[email protected]>
This module offers extensions to the standard Python
datetime module.
"""
... snip ...
from . import relativedelta
from . import tz