2016年3月31日 星期四

[Python] datetime.time 物件進行時間相加的問題筆記

最近在開發 Python 的時候,遇上一件相當惱人的事情,那就是‧‧‧

該如何對 datetime.time 物件進行時間相加的動作?


曾經嘗試過:

>>> datetime.time(1, 2, 3) + 1
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'.

>>> datetime.time(1, 2, 3) + datetime.timedelta(0, 1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

>>> datetime.time(1, 2, 3) + datetime.time(0, 0, 1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'

正當困惑之時,經由谷歌大神指點,發現可以這麼做‧‧‧

1. 先把 datetime.time 轉為 datetime.datetime

>>> import datetime
>>> dt = datetime.datetime.combine(datetime.date.today(), datetime.time(1, 2, 3))

2. 再運用 datetime.timedelta 進行時間相加

>>> dt += datetime.timedelta(0, 1)

3. 最後,取得 datetime 物件中 time 的部分,即為所求。

>>> print dt.time()
01:02:04

2016年3月23日 星期三

[Python] os.path.join(path, *paths) 的問題筆記

今天在撰寫 Python os.path.join(path, *paths) 時遇到一個奇怪的問題:

不管如何 JOIN,所顯示的結果永遠是後面的路徑!


讓我們用下列程式碼做說明:

>>> import os
>>> a = 'path/to/a'
>>> b = '/path/to/b'
>>> print os.path.join(a, b)
/path/to/b


經過一段時間的實驗與偵錯,發現問題出在於 b = '/path/to/b'

原來,os.path.join(a, b) 的 b 不可接受 '/path/to/b' 的這種形式!

以下為實驗結果:

(1) 成功
>>> import os
>>> a = '/path/to/a'
>>> b = 'path/to/b'
>>> os.path.join(a, b)
/path/to/a/path/to/b


(2) 成功
>>> import os
>>> a = 'path/to/a/'
>>> b = 'path/to/b'
>>> os.path.join(a, b)
path/to/a/path/to/b


(3) 成功
>>> import os
>>> a = 'path/to/a'
>>> b = 'path/to/b/'
>>> os.path.join(a, b)
path/to/a/path/to/b/