簡體   English   中英

Python'datetime.datetime'對象不可取消

[英]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 timeimport 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM