@@ -38,23 +38,34 @@ def lp_to_py_object(lp: str):
3838 result [t_set [0 ]] = t_set [1 ]
3939
4040 fields = groups [1 ].split (',' )
41+
42+ def check_bool (token ):
43+ if token .lower ()[0 ] == 't' :
44+ return True
45+ return False
46+
47+ parse_field_val = {
48+ 'i' : lambda s : int (s .replace ('i' , '' )),
49+ 'u' : lambda s : int (s .replace ('u' , '' )),
50+ '\" ' : lambda s : s .replace ('"' , '' ),
51+ 'e' : lambda s : check_bool (s ),
52+ 'E' : lambda s : check_bool (s ),
53+ 't' : lambda s : check_bool (s ),
54+ 'T' : lambda s : check_bool (s ),
55+ 'f' : lambda s : check_bool (s ),
56+ 'F' : lambda s : check_bool (s ),
57+ 'd' : lambda s : float (s )
58+ }
59+
4160 for field in fields :
4261 f_set = field .split ('=' )
43- lastchar = f_set [1 ][len (f_set [1 ]) - 1 ]
44- match lastchar :
45- case 'i' : # integer
46- result [f_set [0 ]] = int (f_set [1 ].replace ('i' ,'' ))
47- case 'u' : # unsigned integer
48- result [f_set [0 ]] = int (f_set [1 ].replace ('u' ,'' ))
49- case '"' : # string
50- result [f_set [0 ]] = f_set [1 ].replace ('"' ,"" )
51- case 'e' | 'E' | 't' | 'T' | 'f' | 'F' :
52- if f_set [1 ][0 ].lower () == 't' :
53- result [f_set [0 ]] = True
54- else :
55- result [f_set [0 ]] = False
56- case _: # assume float
57- result [f_set [0 ]] = float (f_set [1 ])
62+ last_char = f_set [1 ][len (f_set [1 ]) - 1 ]
63+ if last_char in '0123456789' :
64+ last_char = 'd'
65+ if last_char in parse_field_val .keys ():
66+ result [f_set [0 ]] = parse_field_val [last_char ](f_set [1 ])
67+ else :
68+ result [f_set [0 ]] = None
5869
5970 result ['time' ] = pandas .Timestamp (int (groups [2 ]))
6071 return result
0 commit comments