Серия блогов по обработке данных на Python уже здесь!
Эта серия будет основана на книге «Обработка данных Python» и позволит вам изучить обработку данных Python в форме блога для каждой главы книги. Некоторые части книги не очень детализированы, я проверю другие материалы, чтобы дополнить их, и постараюсь охватить основные моменты в каждом блоге и сделать их простыми для понимания.
В этой книге в основном рассказывается о том, как использовать Python для обработки различных типов файлов, таких как JSON, XML, CSV, Excel, PDF и т. д. В последующих главах также будет рассмотрено использование таких навыков, как очистка данных, просмотр веб-страниц, автоматизация и масштабирование. Я также новичок в Python и буду писать статьи с точки зрения новичка, поэтому блог более удобен для новичков.
Если вы не разбираетесь в основах Python, вы можете сначала заглянуть в другой мой блог:Начните работу с Python за десять минут
100
Участвовало несколько опытных разработчиков, которые получили почти1000
Кусокstar
Хотите узнать или принять участие в полнофункциональном полноплатформенном проекте с открытым исходным кодом ?
адрес проекта:GitHub.com/cache Cats/ из…
предисловие
Формат файла, который хранит данные таким образом, чтобы его было легко понять машине, часто называемый машиночитаемым. Общие машиночитаемые форматы включают:
- Значения, разделенные запятыми (CSV)
- Нотация объектов JavaScript (нотация объектов JavaScript, JSON)
- Расширяемый язык разметки (eXtensible Markup Language, XML)
В устной и письменной речи эти форматы данных часто называются краткими именами (например, CSV). Мы будем использовать эти сокращения.
1. CSV-данные
Файл CSV (или сокращенно CSV) — это файл, в котором столбцы данных разделены запятыми. Расширение файла .csv.
Другой тип данных, называемый данными, разделенными табуляцией (TSV), иногда группируется с CSV. Единственная разница между TSV и CSV заключается в том, что разделителем между столбцами данных является табуляция, а не запятая. Расширение файла обычно .tsv, но иногда в качестве расширения используется .csv. По сути, файл .tsv делает в Python то же самое, что и файл .csv.
Мы используем источник данных от Всемирной организации здравоохранения (www.who.int/en/home) скачать…
Открыв официальный сайт ВОЗ, нажмите «Темы здравоохранения», «Данные и статистика», чтобы найти множество данных.
Статистические данные по уходу за младенцами и детьми ясельного возраста были загружены сюда и переименованы вdata.csv
.
Файл csv можно открыть непосредственно в Excel, чтобы увидеть его интуитивно.Мы используем Excel, чтобы открыть следующий рисунок:
Следующим шагом будет использование Python для простой обработки этих данных.
Чтение данных csv в виде списка
Напишите программу, которая читает файл csv:
import csv
csvfile = open('./data.csv', 'r')
reader = csv.reader(csvfile)
for row in reader:
print(row)
import csv
Будет импортирован модуль csv, который поставляется с Python.csvfile = open('./data.csv', 'r')
Открыть файл данных как доступный только для чтения и сохранить в переменнойcsvfile
середина. Затем вызовите csvreader()
метод сохранения вывода вreader
переменная, а затем используйте цикл for для вывода данных.
Запускаем программу, вывод в консоль:
Вы можете видеть, что это соответствует содержимому, открытому в Excel.
Чтение данных csv в виде словаря
Измените код, чтобы читать csv как словарь
import csv
csvfile = open('./data.csv', 'r')
reader = csv.DictReader(csvfile)
for row in reader:
print(row)
Вывод консоли:
2. Данные JSON
Также скачайте источник данных на официальном сайте ВОЗ и переименуйте его вdata.json
. Открыть с помощью инструмента форматированияjson
Файлы следующие:
Напишите программу для парсинга json
import json
# 将 json 文件读取成字符串
json_data = open('./data.json').read()
# 对json数据解码
data = json.loads(json_data)
# data 的类型是 字典dict
print(type(data))
# 直接打印 data
print(data)
# 遍历字典
for k, v in data.items():
print(k + ':' + str(v))
Вывод консоли:
В Python3 для кодирования и декодирования данных JSON можно использовать модуль json, который содержит две функции:
- json.dumps():Кодировать данные.
- json.loads():Расшифруйте данные.
В процессе кодирования и декодирования json исходный тип python и тип json будут преобразованы друг в друга Конкретное сравнение преобразования выглядит следующим образом:
Кодировка Python в соответствующую таблицу преобразования типа JSON:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
JSON декодируется в таблицу соответствия преобразования типов Python:
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
3. XML-данные
Данные в формате XML являются как машиночитаемыми, так и удобными для человека. Но для наборов данных в этой главе гораздо проще просмотреть и понять файлы CSV и JSON, чем файлы XML.
описание формата xml:
- Tag: Части, заключенные в ;
- Element: часть, окруженная тегом, например 2003, может рассматриваться как узел, у которого могут быть дочерние узлы;
- Attribute: пары имя/значение, которые могут существовать в теге, такие как title="Enemy Behind" в примере, обычно представляют собой атрибуты.
Данные ВОЗ непросты для понимания, давайте воспользуемся простыми и понятными данными фильма, чтобы продемонстрировать:
<?xml version="1.0" encoding="UTF-8"?>
<collection shelf="New Arrivals">
<movie title="Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title="Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<episodes>4</episodes>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
<type>Comedy</type>
<format>VHS</format>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom</description>
</movie>
</collection>
Эти данные относительно просты, всего три слоя. Но принцип освоен, и можно обрабатывать несколько слоев данных.
Следующий код написан для синтаксического анализа приведенного выше xml, а затем после синтаксического анализа форматируется в словарь и вывод данных в формате json:
from xml.etree import ElementTree as ET
import json
tree = ET.parse('./resource/movie.xml')
root = tree.getroot()
all_data = []
for movie in root:
# 存储电影数据的字典
movie_data = {}
# 存储属性的字典
attr_data = {}
# 取出 type 标签的值
movie_type = movie.find('type')
attr_data['type'] = movie_type.text
# 取出 format 标签的值
movie_format = movie.find('format')
attr_data['format'] = movie_format.text
# 取出 year 标签的值
movie_year = movie.find('year')
if movie_year:
attr_data['year'] = movie_year.text
# 取出 rating 标签的值
movie_rating = movie.find('rating')
attr_data['rating'] = movie_rating.text
# 取出 stars 标签的值
movie_stars = movie.find('stars')
attr_data['stars'] = movie_stars.text
# 取出 description 标签的值
movie_description = movie.find('description')
attr_data['description'] = movie_description.text
# 获取电影名字,以电影名为字典的键,属性信息为字典的值
movie_title = movie.attrib.get('title')
movie_data[movie_title] = attr_data
# 存入列表中
all_data.append(movie_data)
print(all_data)
# all_data 此时是一个列表对象,用 json.dumps() 将python对象转换为 json 字符串
json_str = json.dumps(all_data)
print(json_str)
Примечания написаны более подробно, следующим образомElementTree
предоставленный метод.
3.1 Три метода разбора
ElementTree
Есть три способа парсить xml:
-
Вызовите метод parse(), чтобы вернуть дерево синтаксического анализа.
tree = ET.parse('./resource/movie.xml') root = tree.getroot()
-
Вызов from_string(), который возвращает корневой элемент дерева синтаксического анализа.
data = open('./resource/movie.xml').read() root = ET.fromstring(data)
-
вызвать класс ElementTree
ElementTree(self, element=None, file=None)
методtree = ET.ElementTree(file="./resource/movie.xml") root = tree.getroot()
3.2 Элементные объекты
class xml.etree.ElementTree.Element(tag, attrib={}, **extra)
Свойства объектов Element
- тег: тег
- текст: удалить тег, получить содержимое тега.
- attrib: Получить атрибут и значение атрибута в теге.
- хвост: это свойство может использоваться для хранения дополнительных данных, связанных с элементом. Его значение обычно представляет собой строку, но может быть и объектом, зависящим от приложения.
Методы объектов-элементов
-
clear()
: очищает все дочерние элементы и все атрибуты, а для атрибутов текста и трейлера задает значение «Нет». -
get(attribute_name, default=None)
: получить значение атрибута, указав имя атрибута. -
items()
: возвращает атрибуты элемента в виде пар ключ-значение. -
keys()
: возвращает имена элементов в виде списка. -
set(attribute_name,attribute_value)
: установка атрибутов и значений атрибутов в теге. -
append(subelement)
: Добавляет дочерние элементы в конец внутреннего списка дочерних элементов. -
extend(subelements)
: добавить дочерние элементы. -
find(match, namespaces=None)
: найти первый совпавший дочерний элемент, совпадением может быть имя тега или путь. Возвращает экземпляр Element или None. -
findall(match, namespaces=None)
: находит все соответствующие дочерние элементы, возвращает список элементов. -
findtext(match, default=None, namespaces=None)
: найти текст, соответствующий первому дочернему элементу. Возвращает текстовое содержимое совпадающего элемента. -
getchildren()
: используется после Python3.2list(elem)
или итерация. -
getiterator(tag=None)
: используется после Python3.2Element.iter()
-
iter(tag=None)
: Создает итератор дерева с корнем в текущем элементе. Итератор перебирает этот элемент и все элементы под ним (приоритет глубины). Если метка не равна None или '*', то из итератора будут возвращены только элементы с меткой, равной метке. Если древовидная структура изменяется во время итерации, результат не определен. -
iterfind(match, namespaces=None)
: Сопоставьте дочерние элементы, удовлетворяющие условию, и верните элемент.
3.3 Объекты ElementTree
class xml.etree.ElementTree.ElementTree(element=None, file=None)
ElementTree — это класс-оболочка, представляющий полную иерархию элементов и добавляющий некоторую дополнительную поддержку сериализации стандартного XML.
-
setroot(element)
: заменить корневой элемент, содержимое исходного корневого элемента исчезнет. -
find(match, namespaces=None)
: сопоставление с корневым элементом аналогично Element.find(). -
findall(match, namespaces=None)
: сопоставление с корневым элементом аналогично Element.findall(). -
findtext(match, default=None, namespaces=None)
: сопоставление с корневым элементом аналогично Element.findtext(). -
getiterator(tag=None)
: вместо Python 3.2 используйте ElementTree.iter(). -
iter(tag=None)
: перебрать все элементы -
iterfind(match, namespaces=None)
: сопоставление с корневым элементом аналогично Element.iterfind(). -
parse(source, parser=None)
: анализировать текст xml и возвращать корневой элемент. -
write(file, encoding=”us-ascii”, xml_declaration=None, default_namespace=None, method=”xml”, *, short_empty_elements=True)
: Запись XML-текста.
Обработка данных в форматах JSON, XML и CSV завершена.В следующем выпуске мы поговорим о том, как обрабатывать файлы Excel.Приглашаем обратить внимание.
Полный стек полноплатформенный проект с открытым исходным кодом CodeRiver
CodeRiver – это бесплатная платформа для совместной работы над проектами. Цель – открыть передовые и последующие этапы развития ИТ-индустрии.Являетесь ли вы менеджером по продукту, дизайнером, программистом, тестировщиком или другим отраслевым персоналом, если у вас есть хорошие идеи и идеи. , вы можете бесплатно зайти на CodeRiver. Публикуйте проекты и собирайте единомышленников, чтобы воплотить мечты в реальность!
Сам CodeRiver также является крупномасштабным проектом с открытым исходным кодом, посвященным созданию полнофункционального, полноплатформенного проекта с открытым исходным кодом корпоративного уровня. Охватывает практически все основные технологические стеки, такие как React, Vue, Angular, Mini Programs, ReactNative, Android, Flutter, Java, Node и т. д., уделяя особое внимание качеству кода.
Было почти100
Участвовал ряд выдающихся разработчиков, и githubstar
Около1000
Кусок. В каждом технологическом стеке есть несколько опытных боссов, а два архитектора руководят структурой проекта. Независимо от того, какой язык и уровень навыков вы хотите изучать, вы можете чему-то научиться здесь.
пройти через高质量源码 + 博客 + 视频
, чтобы помочь каждому разработчику быстро расти.
адрес проекта:GitHub.com/cache Cats/ из…
Ваша поддержка - самая большая движущая сила для нас, чтобы двигаться вперед, добро пожаловать, чтобы поставить лайк, добро пожаловать, чтобы отправить маленькие звездочки ✨ ~