JSON 을 CSV 로 변환

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 Python 을 사용하여 JSON 데이터를 CSV 형식으로 변환하는 방법을 배우게 됩니다. JSON 은 API 응답에 자주 사용되고 CSV 는 표 형식 데이터를 저장하는 데 널리 사용되는 형식이기 때문에, 이는 데이터 과학 및 개발에서 흔히 사용되는 작업입니다.

👀 미리보기

$ head result.csv
"IP","Status","Time","HttpReferer","HttpUserAgent","Request","HttpXForwardedFor","BodyBytesSent","RemoteUser","RequestLength"
"72.55.30.187","202","[2016-02-23 16:25:10]","http://www.google.cn/search?q=hive","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)","GET /index.html HTTP/1.1","-","-","-","0"
"55.222.156.202","200","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0; .NET CLR 1.1.4322)","GET /login.php HTTP/1.1","-","-","-","0"
"190.215.55.29","201","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0; .NET CLR 1.1.4322)","GET /view.php HTTP/1.1","-","-","-","0"
"63.132.98.30","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /list.php HTTP/1.1","-","-","-","0"
"214.124.190.132","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53","GET /login.php HTTP/1.1","-","-","-","0"
"98.215.187.30","202","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /upload.php HTTP/1.1","-","-","-","0"
"143.55.168.187","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /login.php HTTP/1.1","-","-","-","0"
"98.190.201.29","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19","GET /view.php HTTP/1.1","-","-","-","0"
"10.168.55.143","301","[2016-02-23 16:25:10]","http://cn.bing.com/search?q=spark mlib","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"

🎯 작업

이 프로젝트에서는 다음을 배우게 됩니다.

  • JSON 데이터를 읽고 이해하는 방법
  • JSON 데이터를 CSV 파일로 변환하는 방법
  • 올바른 열 이름과 형식을 사용하여 CSV 파일을 작성하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • API 에서 얻은 JSON 데이터를 구조화된 CSV 형식으로 효율적으로 변환
  • JSON 데이터를 파싱하고 CSV 파일로 작성하는 과정을 이해
  • 이러한 기술을 다양한 데이터 처리 및 분석 작업에 적용

JSON 데이터 읽기 및 이해

이 단계에서는 web_access.json 파일에서 JSON 데이터를 읽고 이해하는 방법을 배우게 됩니다.

  1. 텍스트 편집기를 사용하여 ~/project 디렉토리에 있는 web_access.json 파일을 엽니다.
  2. 파일의 내용을 검토합니다. 각 객체가 웹 접근 로그 항목을 나타내는 객체 배열을 볼 수 있습니다. 각 항목에는 "IP", "Status", "Time", "HttpReferer", "HttpUserAgent", "Request", "HttpXForwardedFor", "BodyBytesSent", "RemoteUser", 및 "RequestLength"와 같은 여러 속성이 있습니다.
  3. JSON 데이터의 구조와 내용에 익숙해지십시오. 이 정보는 다음 단계에서 데이터를 CSV 형식으로 변환할 때 유용합니다.
✨ 솔루션 확인 및 연습

JSON 을 CSV 로 변환

이 단계에서는 web_access.json 파일의 JSON 데이터를 CSV 파일로 변환하는 방법을 배우게 됩니다.

  1. ~/project 디렉토리에 convert.py라는 새 Python 파일을 생성합니다.
  2. convert.py 파일에서 필요한 라이브러리를 가져옵니다.
import csv
import json
  1. web_access.json 파일에서 JSON 데이터를 읽습니다.
with open("web_access.json", "r") as json_file:
    data = json.load(json_file)
  1. CSV 파일의 열 순서를 정의합니다.
fieldnames = [
    "IP",
    "Status",
    "Time",
    "HttpReferer",
    "HttpUserAgent",
    "Request",
    "HttpXForwardedFor",
    "BodyBytesSent",
    "RemoteUser",
    "RequestLength",
]
  1. ~/project 디렉토리에 result.csv라는 새 CSV 파일을 열고 csv.DictWriter 객체를 생성합니다.
with open("result.csv", "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
  1. CSV 파일에 헤더 행을 씁니다.
writer.writeheader()
  1. CSV 파일에 데이터 행을 씁니다.
for row in data:
    writer.writerow(row)

완성된 convert.py 파일은 다음과 같아야 합니다.

import csv
import json

## Read JSON data from the file
with open("web_access.json", "r") as json_file:
    data = json.load(json_file)

## Define the order of columns
fieldnames = [
    "IP",
    "Status",
    "Time",
    "HttpReferer",
    "HttpUserAgent",
    "Request",
    "HttpXForwardedFor",
    "BodyBytesSent",
    "RemoteUser",
    "RequestLength",
]

## Writing to CSV file
with open("result.csv", "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)

    ## Writing header
    writer.writeheader()

    ## Writing data rows
    for row in data:
        writer.writerow(row)
✨ 솔루션 확인 및 연습

Python 스크립트 실행

이 단계에서는 convert.py 스크립트를 실행하여 result.csv 파일을 생성합니다.

  1. 터미널을 열고 ~/project 디렉토리로 이동합니다.
  2. 다음 명령을 사용하여 convert.py 스크립트를 실행합니다.
python convert.py
  1. 스크립트가 완료되면 ~/project 디렉토리에 result.csv라는 새 파일이 생성된 것을 확인할 수 있습니다.
  2. 다음 명령을 사용하여 result.csv 파일의 처음 10 줄을 볼 수 있습니다.
head result.csv

이렇게 하면 CSV 파일의 헤더 행과 처음 9 개의 데이터 행이 출력됩니다.

"IP","Status","Time","HttpReferer","HttpUserAgent","Request","HttpXForwardedFor","BodyBytesSent","RemoteUser","RequestLength"
"72.55.30.187","202","[2016-02-23 16:25:10]","http://www.google.cn/search?q=hive","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)","GET /index.html HTTP/1.1","-","-","-","0"
"55.222.156.202","200","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0; .NET CLR 1.1.4322)","GET /login.php HTTP/1.1","-","-","-","0"
"190.215.55.29","201","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0; .NET CLR 1.1.4322)","GET /view.php HTTP/1.1","-","-","-","0"
"63.132.98.30","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /list.php HTTP/1.1","-","-","-","0"
"214.124.190.132","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53","GET /login.php HTTP/1.1","-","-","-","0"
"98.215.187.30","202","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /upload.php HTTP/1.1","-","-","-","0"
"143.55.168.187","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /login.php HTTP/1.1","-","-","-","0"
"98.190.201.29","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19","GET /view.php HTTP/1.1","-","-","-","0"
"10.168.55.143","301","[2016-02-23 16:25:10]","http://cn.bing.com/search?q=spark mlib","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"

축하합니다! web_access.json 파일의 JSON 데이터를 result.csv라는 CSV 파일로 성공적으로 변환했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.