(비) 직렬화기에 대한 좋은 솔루션을 얻으려고 노력하고 있습니다. 형식 패턴과 입력 할 모든 값이 있습니다.
형식 패턴은 다음과 같습니다.
msg = '$bla,%d,%02d,%02d %02d:%02d:%02d.%03d' % (kwargs['...'], ...)
값을 직렬화하면 다음 문자열이 표시됩니다.
bla,1990,12,24 13:37:11.001
그러나 나는 또한 그것을 역 직렬화해야한다. 패턴은 길이와 유형이 크게 다를 수 있습니다. 형식 패턴만을 기반으로 문자열을 역 직렬화하고 싶습니다.
이것이 어떻게 달성 가능한지 아이디어가 있습니까?
편집 : Python 2.7.6을 사용하고 있습니다.
몇 가지 가정하에 정규식으로이 작업을 수행 할 수 있습니다. 다음은 부분적인 예입니다. 전체 솔루션을 위해 여기에 추가해야 할 수도 있습니다. 기본적으로 각 인쇄 형식을 일치하는 정규식으로 조각 단위로 변환합니다.
import re
formattuple = (1990,12,24,13,37,11,1)
formatstr = 'bla,%d,%02d,%02d %02d:%02d:%02d.%03d'
def rep_format(fmt):
fmt = fmt.group(0)
if fmt[0] != '%':
return fmt
if fmt == '%d':
return r'(\d+)'
ftype = fmt[-1]
if ftype == 'd':
fwidth = int(fmt[1:-1])
return r'(\d{%d})'%(fwidth)
else:
return fmt
scanstr = re.sub(r'%\d+[df]', rep_format, formatstr)
scanstr
'bla,(\\d+),(\\d{2}),(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})'
fstr = formatstr%formattuple
fstr
'bla,1990,12,24 13:37:11.001'
match = re.match(scanstr, fstr)
match.groups()
('1990',
'12',
'24',
'13',
'37',
'11',
'001')
mtuple = tuple(int(x) for x in match.groups())
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다