소개
이 프로젝트에서는 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 데이터를 읽고 이해하는 방법을 배우게 됩니다.
- 텍스트 편집기를 사용하여
~/project디렉토리에 있는web_access.json파일을 엽니다. - 파일의 내용을 검토합니다. 각 객체가 웹 접근 로그 항목을 나타내는 객체 배열을 볼 수 있습니다. 각 항목에는
"IP","Status","Time","HttpReferer","HttpUserAgent","Request","HttpXForwardedFor","BodyBytesSent","RemoteUser", 및"RequestLength"와 같은 여러 속성이 있습니다. - JSON 데이터의 구조와 내용에 익숙해지십시오. 이 정보는 다음 단계에서 데이터를 CSV 형식으로 변환할 때 유용합니다.
JSON 을 CSV 로 변환
이 단계에서는 web_access.json 파일의 JSON 데이터를 CSV 파일로 변환하는 방법을 배우게 됩니다.
~/project디렉토리에convert.py라는 새 Python 파일을 생성합니다.convert.py파일에서 필요한 라이브러리를 가져옵니다.
import csv
import json
web_access.json파일에서 JSON 데이터를 읽습니다.
with open("web_access.json", "r") as json_file:
data = json.load(json_file)
- CSV 파일의 열 순서를 정의합니다.
fieldnames = [
"IP",
"Status",
"Time",
"HttpReferer",
"HttpUserAgent",
"Request",
"HttpXForwardedFor",
"BodyBytesSent",
"RemoteUser",
"RequestLength",
]
~/project디렉토리에result.csv라는 새 CSV 파일을 열고csv.DictWriter객체를 생성합니다.
with open("result.csv", "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
- CSV 파일에 헤더 행을 씁니다.
writer.writeheader()
- 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 파일을 생성합니다.
- 터미널을 열고
~/project디렉토리로 이동합니다. - 다음 명령을 사용하여
convert.py스크립트를 실행합니다.
python convert.py
- 스크립트가 완료되면
~/project디렉토리에result.csv라는 새 파일이 생성된 것을 확인할 수 있습니다. - 다음 명령을 사용하여
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 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.



