Я пытаюсь написать UDF в python, который будет вызываться из скрипта свиньи. UDF должен принимать дату в виде строки в формате DD-MMM-YYYY и возвращать формат DD-MM-YYYY. Здесь МММ будет как январь, февраль .. DEC и возвратным ММ будет 01, 02 ... 12.String Slicing in python UDF
Ниже мой питон 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'
То же самое происходит даже тогда, когда строка сравнивается с другой строкой, как в случае (monthstring == «декабрь») :. Даже если в строке месяца указана величина DEC, условие никогда не удовлетворяет.
Неужели кто-то сталкивался с тем же вопросом раньше? Любые идеи, как это исправить.
Сторона примечания: почему бы не использовать объект 'dict', содержащий пары' 'Jan": "01" 'вместо этого леса' elif'. Создание этого 'dict' может быть легко с помощью модуля' calendar'. – quapka
Невозможно воспроизвести - ваш код отлично работает для меня на Python 2.7.10, после замены 'return monthstring' на' return newdate'. ** Кроме того, ** какая строка дает ошибку? Измените свой вопрос и отметьте «#####» или что-то рядом с линией ошибок. Благодаря! – cxw
, похоже, работает под python 2.7 –