gpt4 book ai didi

python - python UDF 中的字符串切片

转载 作者:行者123 更新时间:2023-12-01 03:58:55 25 4
gpt4 key购买 nike

我正在尝试用 python 编写一个 UDF,它将从 Pig 脚本中调用。 UDF 需要接受 DD-MMM-YYYY 格式的字符串形式的日期并返回 DD-MM-YYYY 格式。这里 MMM 将类似于 JAN、FEB.. DEC,返回的 MM 将是 01、02...12。

下面是我的Python UDF

#!/usr/bin/python

@outputSchema("newdate:chararray")
def GetMonthMM(inputString):
print inputString
#monthstring = inputString[3:6]
sl = slice(3,6)
monthstring = inputString[sl]
monthdigit = ""

if ( monthstring == "JAN" ):
monthdigit = "01"
elif ( monthstring == "FEB"):
monthdigit = "02"
elif(monthstring == "MAR"):
monthdigit = "03"
elif(monthstring == "APR"):
monthdigit = "04"
elif(monthstring == "MAY"):
monthdigit = "05"
elif (monthstring == "JUN"):
monthdigit = "06"
elif (monthstring == "JUL"):
monthdigit = "07"
elif (monthstring == "AUG"):
monthdigit = "08"
elif (monthstring == "SEP"):
monthdigit = "09"
elif (monthstring == "OCT"):
monthdigit = "10"
elif (monthstring == "NOV"):
monthdigit = "11"
elif (monthstring == "DEC"):
monthdigit = "12"

sl1 = slice(0,3)
sl2 = slice(6,11)
str1 = inputString[sl1]
str2 = inputString[sl2]

newdate = str1 + monthdigit + str2
return monthstring;

我做了一些调试,问题似乎是在切片之后,字符串被视为数组。我收到以下错误消息

TypeError: unsupported operand type(s) for +: 'array.array' and 'str'

即使将字符串与另一个字符串进行比较(如 if (monthstring == "DEC"): ),也会发生同样的情况。即使当月字符串具有 DEC 作为值时,条件也永远不会满足。

有人遇到过同样的问题吗?有什么想法可以解决这个问题。

最佳答案

最近我使用了calendar模块,在不同的情况下可能更有用,但无论如何。

import calendar
m_dict = {}
for i, month in enumerate(calendar.month_abbr[1:]): #for some reason month_abbr[0] = '', so ommit that
m_dict[month.lower()] = '{:02}'.format(i+1)

def GetMonthMM(inputStr):
day, month, year = inputStr.split('-')
return '-'.join([day, m_dict[month.lower()], year])

print(GetMonthMM('01-JAN-2015'))
# prints 01-01-2015

关于python - python UDF 中的字符串切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com