Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要将3个字母的月份代码转换为2个字母的月份代码_Python - Fatal编程技术网

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)放入
    结果
它有时起作用的原因是,实际上字典不是按照源代码中编写它们的顺序迭代的,而是随机迭代的,因此匹配的条目Feb->FE有时恰好是最后一个


为什么订单是随机的?请参见

Christian已经展示了一种更好的方法来实现您的需求。我会尽力解释这个错误

它是随机工作的,因为代码中存在逻辑错误,再加上字典的随机排序

您有两个变量,
line
Result
。假设
为'16Feb28'。你的代码

  • 获取
    ,尝试用JA替换Jan,并将结果(未更改)放入
    结果
  • 然后取
    ,尝试用FE替换Feb,并将结果(16FE28)放入
    结果
  • 然后它使用
    (16Feb28),尝试用MR替换Mar,并将结果(16Feb28)放入
    结果
  • 等等。你现在能看到问题了吗
  • 最后,它使用
    (16Feb28),尝试用DE替换Dec,并将结果(16Feb28)放入
    结果
它有时起作用的原因是,实际上字典不是按照源代码中编写它们的顺序迭代的,而是随机迭代的,因此匹配的条目Feb->FE有时恰好是最后一个


为什么订单是随机的?请参见

这两种解决方案都非常有效。另一个答案是我会同意的!在这个宏大的计划中,我并不认为12次迭代有那么大的意义……我感谢您的帮助!这可能会让我被赶出论坛,但有没有关于如何转换为VBScript的想法?这不会让你被赶出论坛;)你可以看看答案,从哪里开始。这两种解决方案都非常有效。另一个答案是我会同意的!在这个宏大的计划中,我并不认为12次迭代有那么大的意义……我感谢您的帮助!这可能会让我被赶出论坛,但有没有关于如何转换为VBScript的想法?这不会让你被赶出论坛;)你可以在那里查看答案,了解从哪里开始。谢谢你提供的详细信息。口述是随机排列的,这背后有什么原因吗?你提供的解释很有道理。谢谢你提供的详细信息。口述是随机排列的,这背后有什么原因吗?否则,你提供的解释完全有道理。