Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- optimization page
- django drf
- query 최적화
- Python
- django rank
- Self ERP
- pip 오류
- django
- 페이지 최적화
- 재고 관리
- materialized
- QApplication
- 중량 관리
- 장고
- django erp
- django role based
- tensorflow
- pyside6 ui
- pip 설치
- qpa_plugin
- ERP
- uiload
- django test
- pyside6
- 장고로 ERP
- 파이썬
- test drive development
- orm 최적화
- channels
- qwindows.dll
Archives
- Today
- Total
취미삼아 배우는 프로그래밍
Generator를 사용해 다양한 깊이의 json 파싱 방법 본문
예제 json 파일
PDF 페이지의 텍스트를 파싱하다 보면 아래처럼 엄청나고 다양한 깊이의 json을 맛보게 된다
원하는 값은 'text' 및 'bbox'에 들어간 좌표.
먼저 보면,
block이라는 키 안에 리스트 형식이 엄청 많이 들어가 있는데,
문제는 bbox가 엄청 많이 나오고, 추출하고자 하는 text가 있기도 하고 없기도 하다.
그냥 bbox만 있는경우가 허다하다.
이때는 어떤식으로 파싱을 하는게 좋을까?
답은 recursive generator를 이용해
차곡차곡 담는거다
stackoverflow.com/questions/52725568/how-to-yield-in-a-recursive-function-in-python
# Json 파일을 열고,
with open('student_file.json', 'r') as st_json:
st_python = json.load(st_json)
def recursive_generator_example(d):
if ('text' in d): # text가 d 안에 있으면
yield d['text'], d['bbox'] # 원하는 값을 할당 받아라.
for k in d: # 아니면 그 안 쪽의 것을 까보는데,
if isinstance(d[k], list): # 만약에 리스트면, 그 안쪽의 것들에 대해 또 넣어본다.
for i in d[k]:
if(type(i) != float):
for j in recursive_generator_example(i):
yield j
result = list(recursive_generator_example(st_python))
print(result)
bbox 때문에 더럽게 보일 지 모르지만, 아주 클린하게 값이 나온다.
'파이썬(장고)' 카테고리의 다른 글
Django로 ERP 근황 (1) | 2020.10.31 |
---|---|
Django REST Framework - Authentication(인증, 로그인, 뷰) (0) | 2020.07.17 |
django - materialized css form 사용하기 (0) | 2020.03.30 |
DJANGO 권한 그룹 쉽게 만들기.(Setting Group permissions) (0) | 2020.03.30 |
오류해결. django. channels(daphne) (0) | 2020.01.04 |
Comments