![](/img/trans.png)
[英]Python TypeError: 'datetime.datetime' object is not subscriptable
[英]Python 'datetime.datetime' object is unsubscriptable
首先,我不是python開發人員。 我正在嘗試從命令行執行的python腳本中解決問題。 該腳本由不再在身邊並且不再願意幫助解決問題的人編寫。
這是python 2.5,目前無法升級。 這是有問題的代碼行:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = datetime(*start_time[:6])
end_time = datetime.strptime(str(paf.End),"%Y-%m-%d %H:%M:%S")
dict_end = datetime(*end_time[:6])
當運行此代碼時,將生成描述錯誤:'datetime.datetime'對象不可取消。
這是導入語句:
from datetime import datetime
我覺得這很簡單,但不是我的母語,而Google並沒有產生任何有價值的結果,我深陷其中。 我嘗試了幾種不同的導入方法,產生了不同的錯誤,但是所有這些語句都是如此。 任何幫助,將不勝感激。
看來您只是想時間合適? datetime.strptime方法返回一個“ datetime”對象,因此以下屬性包含時間:datetime.day,datetime.hour,datetime.year等。
它不是導入錯誤。 它是Python不喜歡的* start_time [:6] * end_time [:6]。 代替它
羅伯特,嘗試更換
dict_start = datetime(*start_time[:6])
與
dict_start = start_time
和
dict_end = datetime(*end_time[:6])
與
dict_end = end_time
它看起來很傻,但還是可以嘗試一下。 我的原因是: datetime.strptime
返回datetime.datetime
對象。 由於代碼最初說
dict_start = datetime(*start_time[:6])
看來dict_start
也應該是datetime.datetime
,具有相同的6個字段(年,月,日,小時,分鍾,秒)。 所以嘗試
dict_start = start_time
如果那不起作用,您可能必須向我們展示更多代碼,以便我們可以對預期的目的進行更好的猜測。
編輯:獲得各個字段(年,月,日,小時,分鍾,秒)的最簡單方法是使用點表示法訪問屬性。 例如,
(start_time.year,start_time.month,start_time.day)
給出一個三元組,其中年,月,日為整數。
PS。 有關日期時間對象的更多信息,請參見http://docs.python.org/library/datetime.html 。 它可能包含對您有用的示例。
看起來datetime.strptime
調用實際上是對time.strptime
的調用(在模塊的開始處有單獨的import time
)-后者的調用的確會返回一個可下標的,類似於元組的對象,並且是慣用法
xx = time.strptime(...)
yy = datetime.datetime(x[:6])
(當然,在模塊的開始處具有import time
和import datetime
import time
)確實是在datetime.datetime
類型添加其自己的strptime
函數之前將字符串解析為datetime.datetime
實例的規范方法,該函數基本上完成了這項工作。 因此,它看起來像“不完全遷移”的代碼。
要從datetime.datetime
實例x
僅提取日期(作為datetime.date
對象,僅包含年,月和日-不含小時,分鍾,秒和小數),請調用x.date()
,它將返回所需的內容日期對象(當然,不能修改x
本身:日期時間對象是不可變的-您始終創建新對象,而不更改現有對象)。
觀察結果:
編寫代碼的人都不會對其進行測試; 它永遠不可能正常運行。
撰寫該文件的人將datetime.datetime.strptime與time.strptime混淆了。
曾幾何時(雙關語意圖)datetime.datetime.strptime不存在。 一個人必須做以下事情:
>>> from datetime import datetime
>>> import time
>>> time_tuple = time.strptime("2010-03-19 13:22:45","%Y-%m-%d %H:%M:%S")
>>> time_tuple
(2010, 3, 19, 13, 22, 45, 4, 78, -1)
>>> datetime(*time_tuple[:6])
datetime.datetime(2010, 3, 19, 13, 22, 45)
( [:6]
是一個死掉的禮物)
現在可以做到這一點:
>>> from datetime import datetime
>>> datetime.strptime("2010-03-19 13:22:45","%Y-%m-%d %H:%M:%S")
datetime.datetime(2010, 3, 19, 13, 22, 45)
以下代碼對我來說沒有意義:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = datetime(*start_time[:6])
如果您需要在dict_start中使用元組映射,請使用以下代碼:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = start_time.timetuple()[:6]
如果需要字典,則:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = dict(zip(('year', 'month' ,'day', 'hour', 'minute', 'second'), start_time.timetuple()[:6]))
-或使用paf.Start(如果可能)。 另外,我不確定,但是可能是在Python std lib中預定義了元組(“年”,“月”,“天”,“小時”,“分鍾”,“秒”) ,或者它很容易替換為其他構造,但這是午夜,我看不到其他任何明顯的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.