파이썬으로 CSV 파일을 json 으로 파싱, json을 csv로 파싱

조회수 4550회

안녕하세요 프로그래밍 완전초보자입니다.

제가 파이썬을 이용하여 json을 파싱하여 csv로 csv를 파싱(용어가 맞나요? encoding인지??)하여 json 파일로만드는 과제를 받았는데 저희 현재 수준은 JSON이란 무엇인가를 아는 정도입니다 JSON파일 구조정도는 알고 있구요

말도안되는 질문인지 알고 있지만 직접 코딩아니더라도 무엇부터 찾아보면 좋을지 알려주시면 감사하겠습니다.

현재 쓰는 파이썬은 3.6.5 이구요(업데이트는 설치한지 얼마 안되서)

조금 공부한 티를 내면

  1. 예를 들어 제가 JSON파일을 갖고 있다면 json파일을 읽어들인후 csv로 바꾸는건지

  2. json 파일의 구조가 있으면 그걸 CSV 파일로 어떻게 정의 해주어야 하는건지

  3. 위의 상황과 반대로 csv파일을 갖고 있다면 어떻게 json 파일로 바꿔야 하는지 예를 들어 알려주시면 감사하겠습니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • CSV로 인코딩 가능하려면 그 JSON 파일은 동일한 키에 다른 값을 갖는 여러 객체의 배열이어야 하겠죠. 이를테면:

    [
      { key1 : "foo",
        key2: "bar",
        ...
      },
      { key2: "meh",
        ...
      },
      ...
    ]
    

    그러면 JSON 포맷의 문자열을 파싱해서 CSV 포맷으로 변환하는 줄거리는 대략 이렇게 되겠죠.

    1. 대략 이런 느낌으로 정규식을 돌려서 키와 값을 가져옵니다.
    2. 빈 배열을 하나 만들고 앞쪽 임의문자들을 키로, 뒤쪽 임의문자들을 값으로 하는 배열을 그 배열의 원소로 추가해 줍니다.
    3. 키-값이 들어온 배열을 가지고 for 돌려서 CSV 형식에 맞게 문자열을 만듭니다. 이때 입력받은 키-값이 완벽하지 않을 수 있으므로 (위에 적은 예시 보시면 두번째 객체에 key1이 없죠. 이런 식) 이런 케이스에 유의합니다.
    4. 만든 문자열을 출력하거나 파일로 저장합니다.
    • @엽토군 답변 감사합니다. 정규식과 for 구문을 배워야 겠군요. "[(공백이나 줄바꿈)(!하나 이상의:){(공백이나 줄바꿈)(!!하나 이상의:)임의문자들(0개이상의공백):(0개이상의공백)"임의문자들"(0~1개콤마)(공백이나 줄바꿈)(:여기까지 하나 이상!!)}(0~1개콤마)(:여기까지 하나 이상!)(공백이나 줄바꿈)]" 요부분을 잘 이해가 안가는데 샘플이 위와 같은건가요?? 알 수 없는 사용자 2018.7.17 21:04
    • 원래는 정규표현식을 제대로 적어보려고 했는데 번거로워서 & 직접 해보시는게 좋을것같아서 말로 풀어서 써본거였습니다. 방금 간단한 예시를 답변에 업데이트했으니 확인해 보세요. 엽토군 2018.7.18 01:09
    • @엽토군 님 답변 감사합니다. 역시 직접 해봐야 하겠습니다 알 수 없는 사용자 2018.7.18 13:03
  • 제가 질문하고 제가 답변달아 이상하지만 혹시 봐주시는 분 계시면 이상한 부분 알려주세요 감사합니다.

    1. csv -> json

    import csv import json

    csvfile = open('test.csv','r') jsonfile = open(file='test_csv.json',mode='w')

    fieldNames = ('A','B','C','D','E') reader = csv.DictReader(csvfile, fieldnames=fieldNames)

    data = list(reader) json.dump(data,jsonfile,indent=4)

    2.json -> csv

    import csv import json

    csvfile = open (file='test_json.csv',mode='w',newline='') jsonfile = open('test_csv.json','r')

    fieldNames = ["A","B","C","D","E"] writer = csv.DictWriter(f=csvfile, fieldnames=fieldNames)

    data = json.load(jsonfile) writer.writerows(data)

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아하~ 라이브러리 사용 가능한 상황이라면 라이브러리가 답이죠! 바퀴를 재발명할 필요는 없으니까요. 엽토군 2018.7.29 22:23
    • @엽토군 넵 감사합니다. 라이브러리 사용이 가능하다는걸 이번에 알았습니다 ㅎㅎ 엽토군님이 알려주신건 라이브러리 없이 사용하는건가요? 컬러명이 있을때도 적용가능할까요? 알 수 없는 사용자 2018.7.30 08:05
    • json을 문자열로 취급하고 읽어서 처리하는 "파서"를 최소한으로 구현하면 저렇게 된다는 걸 보여드린 것입니다. 최소한 import re 로 regex는 가져와야 쓸수있겠죠? 엽토군 2018.7.30 09:49

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)