我有一個格式爲「2010年10月28日」(或simillar)的日期。現在我想將月份的全名更改爲較短的版本(本例中爲10月份)。爲此,我準備一本字典:在python中替換字符串的奇怪行爲
_mapping = {'January': 'Jan',
'February': 'Feb',
'March': 'Mar',
'April': 'Apr',
'May': 'May',
'June': 'Jun',
'July': 'Jul',
'August': 'Aug',
'September': 'Sep',
'October': 'Oct',
'November': 'Nov',
'December': 'Dec'}
,並在該substition去向何方,我寫了下面的方法:
def fetch(self, pno):
...
date = #get data (working fine)
for l, s in self._mapping.iteritems():
pubdate = date.replace(l, s)
print l + " -> " + pubdate #this is only for debug
(pubd_month, self.pubd_day, self.pubd_year) = pubdate.split(' ')
print pubd_month, self.pubd_day, self.pubd_year
print pubdate
執行的結果是:
February -> October 28, 2008
October -> Oct 28, 2008
January -> October 28, 2008
April -> October 28, 2008
November -> October 28, 2008
March -> October 28, 2008
August -> October 28, 2008
May -> October 28, 2008
December -> October 28, 2008
June -> October 28, 2008
September -> October 28, 2008
July -> October 28, 2008
October
October 28, 2008
正如你所看到的看起來替代品在10月份找到了,但是在循環之外,我又獲得了全名。我做錯了什麼?
另一個問題:有沒有更簡單的方法來做到這一點?
請注意,'%b'和'%B'月份名稱是由區域設置決定的。我發現,如果你的代碼必須在不能控制語言環境的不同環境中運行,那麼你必須手動進行月份替換*。 –
然後可以強制使用英文語言環境嗎? – Moby04
不是真的;說實話,替換字符串要容易得多。如果語言環境已經生成,請參閱[Python中的語言環境日期格式](http://stackoverflow.com/q/985505),瞭解*可能在POSIX系統上工作的解決方案。 –