Python 需要将3个字母的月份代码转换为2个字母的月份代码
我正在尝试格式化日期,即从Python 需要将3个字母的月份代码转换为2个字母的月份代码,python,Python,我正在尝试格式化日期,即从Jan到JA,Feb到FE。我有一个专门为此编写的字典,但是我的代码只能随机工作,例如,有时每4次,有时每24次。我对Python还不熟悉,对此我无法理解。以下代码的输出大部分时间是16Jun28,但有时是正确的16JN28 import datetime month_code = {'Jan': 'JA', 'Feb': 'FE', 'Mar': 'MR', 'Apr': 'AL', 'May': 'MA',
Jan
到JA
,Feb
到FE
。我有一个专门为此编写的字典,但是我的代码只能随机工作,例如,有时每4次,有时每24次。我对Python还不熟悉,对此我无法理解。以下代码的输出大部分时间是16Jun28
,但有时是正确的16JN28
import datetime
month_code = {'Jan': 'JA',
'Feb': 'FE',
'Mar': 'MR',
'Apr': 'AL',
'May': 'MA',
'Jun': 'JN',
'Jul': 'JL',
'Aug': 'AU',
'Sep': 'SE',
'Oct': 'OC',
'Nov': 'NO',
'Dec': 'DE'}
today = datetime.datetime.now()
DD = datetime.timedelta(days=90)
use_by = today + DD
use_by_str = use_by.strftime("%y-%b-%d")
def label_function():
month = use_by.strftime("%b")
year = use_by.strftime("%y")
day = use_by.strftime("%d")
return year + month + day
line = label_function()
for k, v in month_code.items():
Result = line.replace(k, v)
print(Result)
您正在迭代字典,将3个字符的月名替换为2个字符,但您总是将结果放在不同的变量中,而不是对
line
本身进行变异
你要找的是
for k, v in month_code.items():
line = line.replace(k, v)
另一方面,为什么不让label_函数
返回日期字符串的元组,然后只需要用1次查找来更改1个值呢
def label_function():
month = use_by.strftime('%b')
year = use_by.strftime('%y')
day = use_by.strftime('%d')
return year, month, day
year, month, day = label_function()
result = year + month_code[month] + day
您正在迭代字典,将3个字符的月名替换为2个字符,但您总是将结果放在不同的变量中,而不是对
line
本身进行变异
你要找的是
for k, v in month_code.items():
line = line.replace(k, v)
另一方面,为什么不让label_函数
返回日期字符串的元组,然后只需要用1次查找来更改1个值呢
def label_function():
month = use_by.strftime('%b')
year = use_by.strftime('%y')
day = use_by.strftime('%d')
return year, month, day
year, month, day = label_function()
result = year + month_code[month] + day
Christian已经展示了一种更好的方法来实现您的需求。我会尽力解释这个错误 它是随机工作的,因为代码中存在逻辑错误,再加上字典的随机排序 您有两个变量,
line
和Result
。假设行
为'16Feb28'。你的代码
- 获取
,尝试用JA替换Jan,并将结果(未更改)放入行
结果
- 然后取
,尝试用FE替换Feb,并将结果(16FE28)放入行
结果
- 然后它使用
(16Feb28),尝试用MR替换Mar,并将结果(16Feb28)放入行
结果
- 等等。你现在能看到问题了吗
- 最后,它使用
(16Feb28),尝试用DE替换Dec,并将结果(16Feb28)放入行
结果
为什么订单是随机的?请参见Christian已经展示了一种更好的方法来实现您的需求。我会尽力解释这个错误 它是随机工作的,因为代码中存在逻辑错误,再加上字典的随机排序 您有两个变量,
line
和Result
。假设行
为'16Feb28'。你的代码
- 获取
,尝试用JA替换Jan,并将结果(未更改)放入行
结果
- 然后取
,尝试用FE替换Feb,并将结果(16FE28)放入行
结果
- 然后它使用
(16Feb28),尝试用MR替换Mar,并将结果(16Feb28)放入行
结果
- 等等。你现在能看到问题了吗
- 最后,它使用
(16Feb28),尝试用DE替换Dec,并将结果(16Feb28)放入行
结果
为什么订单是随机的?请参见这两种解决方案都非常有效。另一个答案是我会同意的!在这个宏大的计划中,我并不认为12次迭代有那么大的意义……我感谢您的帮助!这可能会让我被赶出论坛,但有没有关于如何转换为VBScript的想法?这不会让你被赶出论坛;)你可以看看答案,从哪里开始。这两种解决方案都非常有效。另一个答案是我会同意的!在这个宏大的计划中,我并不认为12次迭代有那么大的意义……我感谢您的帮助!这可能会让我被赶出论坛,但有没有关于如何转换为VBScript的想法?这不会让你被赶出论坛;)你可以在那里查看答案,了解从哪里开始。谢谢你提供的详细信息。口述是随机排列的,这背后有什么原因吗?你提供的解释很有道理。谢谢你提供的详细信息。口述是随机排列的,这背后有什么原因吗?否则,你提供的解释完全有道理。