반응형
text = 'foo = 23 + 42 * 10'

tokens = [('NAME', 'foo'), ('EQ', '='), ('NUM', '23'), ('PLUS', '+'),
('NUM', '42'), ('TIMES', '*'), ('NUM', '10')]

import re
NAME = r'(?P<NAME>[a-zA-Z_][a-zA-Z_0-9]*)'
NUM = r'(?P<NUM>\d+)'
PLUS = r'(?P<PLUS>\+)'
TIMES = r'(?P<TIMES>\*)'
EQ = r'(?P<EQ>=)'
WS = r'(?P<WS>\s+)'

master_pat = re.compile('|'.join([NAME, NUM, PLUS, TIMES, EQ, WS]))

from collections import namedtuple
import json
Token = namedtuple('Token', ['type', 'value'])

def generate_tokens(pat, text):
scanner = pat.scanner(text)
for m in iter(scanner.match, None):
yield Token(m.lastgroup, m.group())

for tok in generate_tokens(master_pat, 'foo = 42'):
print(tok)

tokens = (tok for tok in generate_tokens(master_pat, text) if tok.type != 'WS')
#print(list(tokens))
jj = {}
for tok in tokens:
#print(tok)
#t = "'{0}':'{1}'".format(tok.type, tok.value)
#t = ':'.join([tok.type, tok.value])
jj[tok.type] = tok.value

print(jj)

jj2 = json.dumps(jj)
print(jj2)

print("")
# 테스트용 Dictionary
customer = {
'id': 152352,
'name': '강진수',
'history': [
{'date': '2015-03-11', 'item': 'iPhone'},
{'date': '2016-02-23', 'item': 'Monitor'},
]
}

# JSON 인코딩
jsonString = json.dumps(customer)

# 문자열 출력
print(jsonString)
print(type(jsonString)) # class str



반응형

+ Recent posts