Python/공부공부
[Python] ast.literal_eval()
phyho
2025. 7. 2. 13:13
AST(Abstract Syntax Tree, 추상 구문 트리)
프로그래밍 언어에서 소스 코드를 구조적으로 표현한 트리 형태의 자료구조.
파이썬은 표준 라이브러리로 ast 모듈을 제공.
ast.dump() 함수
AST 트리를 문자열로 출력 (디버깅용)
ast.parse() 함수
코드 문자열을 AST로 변환.
import ast
code = "x = 3 + 4"
tree = ast.parse(code)
print(ast.dump(tree, indent=4)) # 트리 구조 출력
(출력결과)
Module(
body=[
Assign(
targets=[Name(id='x', ctx=Store())],
value=BinOp(
left=Constant(value=3),
op=Add(),
right=Constant(value=4)
)
)
],
type_ignores=[]
)
ast.literal_eval() 함수
코드 문자열을 안전하게 평가하여 값(Python객체)으로 변환.
허용되는 타입: str, int, float, tuple, list, dict, bool, None
from ast import literal_eval
print(literal_eval("['a', 'b', 'c']")) # ['a', 'b', 'c']
print(literal_eval("{'x': 1, 'y': 2}")) # {'x': 1, 'y': 2}
나는 배열 형태의 문자열을 리스트로 변환하려고 사용해봄.
strData = "['안녕하세요']"
listData = ast.literal_eval(strData)
print("strData: ", type(strData)) # <class 'str'>
print("strData: ", strData) # ['안녕하세요']
print("listData: ", type(listData)) # <class 'list'>
print("listData: ", listData) # ['안녕하세요']
json_string = json.dumps(listData, ensure_ascii=False, indent=4)
최종적으로 원하는 형태의 json_string 데이터 완성.
(출력 결과)
json_string: [
"안녕하세요"
]
* 개행 유지 *
strData = "['안녕하세요.\n둘째 줄입니다']"
data = strData.replace('\n', '\\n')
listData = ast.literal_eval(data)
print("listData: ", listData) # ['안녕하세요.\n둘째 줄입니다']
(참고블로그)
https://emilkwak.github.io/literal-eval-str-expression
ast.literal_eval()로 문자열(str) 속 표현식(expression) 인식하기
Python, Pandas를 Excel보다 사랑하는 직장인을 위한 블로그
emilkwak.github.io