python excel to json관련 질문 드립니다.

최종오@Google의 이미지

excel에 아래와 같은 구조로 되어 있습니다.

대분류 001 기타
소분류 01 네일샵
소분류 02 피부클리닉
소분류 03 헤어샵
대분류 002 레저스포츠
소분류 12 골프
소분류 13 스포츠
소분류 14 아웃도어
...

대분류와 소분류가 쭉 있고.. 대분류 001 안에 소분류 01 02 03 이 포함되는 개념입니다.

해당하는 부분을

001 : 기타 
    {
        01: 네일샵,
        02: 피부클리닉,
        03: 헤어샵
    },
002 : 레저스포츠
...

이런 형식으로 json을 얻고 싶습니다.

pandas로 변경해서 해야 할지 조금 난감합니다.

조언을 구할 수 있을까요?

보통 값들이 잘 구분되어 있는데 같은 셀에 있어서 난감한 케이스입니다.

황병희의 이미지

안녕하세요,

저와 같은 고민을 하고 계신거 같아서 2달이 지났지만 답변을 달아봅니다.

저의 경우
대분류에 [번식사/비육사] 처럼 우사를 역할별로 크게 2개로 나누고,
소분류에 [중간본동/꼭대기동/아랫동안/아랫동밖] 처럼 우방 이름,
그리고 소분류격에 해당하는 각 우방엔 한우(소)의 개체 번호를 기재합니다.

그럼 이렇게 대략 그릴 수 있어요.

{
  "번식사": {
    "중간본동": [
      "6783",
      "3964",
      "0836"
    ],
    "꼭대기동": [
      "8000",
      "6482"
    ]
  },
  "비육사": {
    "아랫동안": [
      "9787",
      "2231",
      "9437",
      "8892",
      "9513"
    ],
    "아랫동밖": [
      "0069",
      "6279",
      "1065"
    ]
  }
}

위처럼 전 한우(소)의 개체 위치를 표기하는 방법론으로 json 을 활용했씁니다.
json 만들때 제가 사용한 파이썬3 코드는 다음 주소에서 볼 수 있어요~
https://gitlab.com/soyeomul/hanwoo/-/tree/master/json

갱신: 실제업무에서 쓰고있는 스크린샷 하나 올립니다 [2021-03-22]

꾸벅~

대숲농장 황병희 드림

[크롬북에서 적었어요~]

댓글 첨부 파일: 
첨부파일 크기
Image icon Screenshot from 2021-03-22 11-48-41.png371.8 KB

--
^고맙습니다 감사합니다_^))//

Anti-Lock의 이미지

문득 궁금한것이...

올려주신 그림의 한우(소)의 개체 번호를 보면
12자리의 개체식별 번호 체계가 아닌 다른 체계로 보이는데,
첫글자에 위치한 +, - 는 무슨 의미인가요?
그담에 오는 글자는 F, M 인걸로 봐서 암,수를 의미하는거 맞겠죠?
(청일점 소가 있네요)

황병희의 이미지

Quote:
첫글자에 위치한 +, - 는 무슨 의미인가요?

앗 농사꾼코드에 관심주셔서 감사합니다^^^

수소(M)에서 +/- 는 거세 有/無 이구용;;;
암소(F)에서 +/- 는 수정 有/無 입니당;;;

꾸벅,,,

농사꾼 황병희 드림

[우분투 18.04 파여폭스 나비에서 적었습니다~]

--
^고맙습니다 감사합니다_^))//

Anti-Lock의 이미지

data = """대분류 001 기타
소분류 01 네일샵
소분류 02 피부클리닉
소분류 03 헤어샵
대분류 002 레저스포츠
소분류 12 골프
소분류 13 스포츠
소분류 14 아웃도어"""
 
g1 = {}
 
last_g1_key = None
for line in data.split('\n'):
    arr = line.split()
    category, key, name = arr[0], arr[1], arr[2]
    if category == "대분류":
        g1[key] = dict(name=name, items={})
        last_g1_key = key
    if category == "소분류":
        g1[last_g1_key]['items'][key] = name
 
# print(g1)
 
import json
print(json.dumps(g1, ensure_ascii=False, indent=4))

출력:

{
    "001": {
        "name": "기타",
        "items": {
            "01": "네일샵",
            "02": "피부클리닉",
            "03": "헤어샵"
        }
    },
    "002": {
        "name": "레저스포츠",
        "items": {
            "12": "골프",
            "13": "스포츠",
            "14": "아웃도어"
        }
    }
}
파이썬3의 이미지

오 이 코드 나중에 업무 코드 보완할때 활용하고 싶네요!!!
훌륭한 예제 코드에 너무 감사드립니다^^^

꾸벅,,,

파이썬3 드림

[우분투 18.04 파여폭스 나비에서 적었어요~]

Anti-Lock의 이미지

개선사항

    arr = line.split()
    category, key, name = arr[0], arr[1], arr[2]

위처럼 같이 2줄로 적혀있는 내용이,

다음처럼 한줄로 가능하네요

    category, key, name = line.split()
    # 다음도 가능(다른언어 사용가가 보기에 더 친숙함??)
    # [category, key, name] = line.split()

황병희의 이미지

category, key, name = line.split()

프로그래머분들에겐 위처럼 한줄로 줄이는것이 더 아름다워보일지라도...
현장에서 농사꾼이 직접 유지-보수하는 입장에선
위 한줄을 여러줄로 늘이는게이해하기 쉽고 고맙더라구요,,,

조심스럽게 농사꾼 소견 남겨봅니다^^^

[크롬북에서 적었어요~]

--
^고맙습니다 감사합니다_^))//

swish95의 이미지

이 의견은 동의하기 힘드네요 ^^

나중에 arr 의 내용을 재사용 하지 않는다면 불필요하게 arr 이라는 변수를 만드는게 더 오버헤드 인거 같습니다.

혹시 split 의 내용이 3개를 넘어가는 경우가 있다면

.split()[:3] 으로 하거나 하는게 차후 유지보수나 에러 측면에서 더 좋을수도 있으니까요

------------------------------------------------------------
ProgrammingHolic

황병희의 이미지

나중에 arr 의 내용을 재사용 하지 않는다면 불필요하게 arr 이라는 변수를 만드는게 더 오버헤드 인거 같습니다

하루동안... 선생의 위 인용문을 계속 곱씹어봤더랬죠...
명언입니다... 생각을 바꾸고 저도 그렇게 할 수 있도록 노력해보겠씁니다.

감사합니다^^^

[우분투 18.04 파여폭스 나비에서 적었어요~]

--
^고맙습니다 감사합니다_^))//

김정균의 이미지

틀린 말씀은 아니지만, 아무리 자신이 유지보수 하는 코드라도, 특히나 개발이 주업무가 아닌 경우, 정말 어쩌다 한번 보는 코드들은 거의 남이 짜 놓은 코드같이 느껴지는 경우가 많습니다. (내 기억속의 지우개...)

이런 코드들의 유지 보수는, 그냥 재사용이고 뭐고 풀어놓은 코드가 더 유리할 수도 있습니다. 더군다나 이런 코드들은 최적화를 요구하지 않는 경우가 허다하고요. 최적화가 필요없는 경우에 최적화를 하는 것도 리소스 낭비일 수 있겠죠. 그냥 최적화나 오버헤드 같은 것들이 항상 동일한 조건이 아니다라는 것을 표현해 보고 싶었습니다.

저는 황병희님의 의견에 "동의"가 됩니다. 모두가 swish95 님 처럼 훌륭한 개발자도 아니고, 누구나 swish95 님 처럼 훌륭한 개발자가 되려고 목표를 가지는 것은 아니라는 것이 함정인 것 같습니다. 저도 질답을 20여년 정도 하면서 이 부분을 너무 간과했던 것 같고, 그래서 질문자들에게 섭섭한 말(대부분 너 잘났다.. 를 독하게 쓴 표현)을 많이 들었던 것 같습니다. 모두가 저 처럼 되고 싶어 하는 것이 아닌데, 저는 저 처럼 되라고 답변을 한 것 같습니다. 공부가 필요한 사람이 있고, 공부가 필요하지 않은 사람이 있고.. 더군다나 공부가 싫은 사람도 있는걸 알려고 하지 않았던 거죠.

이런 의견을 이전 부터 생각한 것이 아니라, switch95님의 의견에 대한 제 의견을 적다 보니 갑자기 확 다가오는 생각 이었습니다. 아.. 내가 이래서 힘들어 했구나.. 아 내게 질문 하던 사람들이 고마웠던 사람들도 있지만 정말 짜증났던 사람들도 있었겠구나.. 덕분에 제 과거를 돌아볼 수 있었습니다. 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.