Введение
В этом проекте вы научитесь конвертировать данные в формате JSON в формат CSV с использованием Python. Это распространенная задача в области науки о данных и разработке, так как JSON часто используется для ответов API, а CSV - популярный формат для хранения табличных данных.
👀 Предварительный просмотр
$ head result.csv
"IP","Статус","Время","HttpReferer","HttpUserAgent","Запрос","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 (совместимый; 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 (совместимый; 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 (совместимый; 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 (совместимый; 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, как 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 (совместимый; 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 (совместимый; 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, как 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 (совместимый; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"
🎯 Задачи
В этом проекте вы научитесь:
- Читать и понимать данные в формате JSON
- Конвертировать данные в формате JSON в CSV-файл
- Записывать CSV-файл с правильными именами столбцов и форматом
🏆 Достижения
После завершения этого проекта вы сможете:
- Эффективно конвертировать данные в формате JSON, полученные из API, в структурированный формат CSV
- Разобраться в процессе разбора данных в формате JSON и записи их в CSV-файл
- Применить эти навыки к различным задачам обработки и анализа данных
Прочитать и понять данные в формате JSON
В этом шаге вы научитесь читать и понимать данные в формате JSON из файла web_access.json.
- Откройте файл
web_access.json, расположенный в директории~/project, с использованием текстового редактора. - Просмотрите содержимое файла. Вы должны увидеть массив объектов, где каждый объект представляет собой запись в журнале доступа к веб-ресурсу. Каждая запись имеет несколько свойств, таких как
"IP","Статус","Время","HttpReferer","HttpUserAgent","Запрос","HttpXForwardedFor","BodyBytesSent","RemoteUser"и"RequestLength". - Ознакомьтесь с структурой и содержанием данных в формате JSON. Эта информация будет полезной на следующем шаге при конвертации данных в формат CSV.
Конвертировать JSON в CSV
В этом шаге вы научитесь конвертировать данные в формате JSON из файла web_access.json в CSV-файл.
- Создайте новый файл Python под названием
convert.pyв директории~/project. - В файле
convert.pyимпортируйте необходимые библиотеки:
import csv
import json
- Прочитайте данные в формате JSON из файла
web_access.json:
with open("web_access.json", "r") as json_file:
data = json.load(json_file)
- Определите порядок столбцов в CSV-файле:
fieldnames = [
"IP",
"Статус",
"Время",
"HttpReferer",
"HttpUserAgent",
"Запрос",
"HttpXForwardedFor",
"BodyBytesSent",
"RemoteUser",
"RequestLength",
]
- Откройте новый CSV-файл под названием
result.csvв директории~/projectи создайте объект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",
"Статус",
"Время",
"HttpReferer",
"HttpUserAgent",
"Запрос",
"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. - Вы можете просмотреть первые 10 строк файла
result.csvс использованием следующей команды:
head result.csv
В результате должны быть выведены строка заголовка и первые 9 строк данных CSV-файла.
"IP","Статус","Время","HttpReferer","HttpUserAgent","Запрос","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 (совместимый; 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 (совместимый; 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 (совместимый; 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 (совместимый; 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, как 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 (совместимый; 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 (совместимый; 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, как 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 (совместимый; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"
Поздравляем! Вы успешно конвертировали данные в формате JSON из файла web_access.json в CSV-файл с именем result.csv.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



