반응형
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
반응형
'Program > Python' 카테고리의 다른 글
Python의 Generator와 yield 키워드 (0) | 2017.10.29 |
---|---|
가상 환경을 사용한 Python 설치 - Virtualenv, autoenv (0) | 2017.10.28 |
파이썬 이터레이터 (0) | 2017.10.23 |
파이썬 제너레이터 generator (0) | 2017.10.23 |
파이썬 이터레이터 iterator (0) | 2017.10.23 |