Обработка данных
Чтение CSV-файлов
CSV — настолько простой формат, что до сих пор мы работали с ним с помощью собственного кода. Однако в стандартной библиотеке Python есть готовый модуль для работы с CSV-файлами: csv. Он работает так:
import csv
with open("test.csv") as my_file:
for line in csv.reader(my_file, delimiter=";"):
print(line)Код выше читает все строки CSV-файла test.csv, разделяет содержимое каждой строки на список с помощью разделителя ; и выводит каждый список. Поэтому если содержимое строк такое:
012121212;5
012345678;2
015151515;4код выведет это:
['012121212', '5'] ['012345678', '2'] ['015151515', '4']
Раз формат CSV такой простой, зачем нужен отдельный модуль, если мы можем просто использовать функцию split? Во-первых, благодаря устройству модуля он будет корректно работать и тогда, когда значения в файле являются строками, которые тоже могут содержать символ-разделитель. Если какая-то строка файла выглядела бы так
"aaa;bbb";"ccc;ddd"код выше дал бы это:
['aaa;bbb', 'ccc;ddd']
Функция split также разделила бы данные внутри строк, что, скорее всего, испортило бы данные, а вместе с ними и нашу программу.
Чтение JSON-файлов
CSV — лишь один из многих машиночитаемых форматов данных. JSON — еще один такой формат, и его часто используют, когда данные нужно передавать между приложениями.
JSON-фай лы — это текстовые файлы со строгим форматом, который, возможно, чуть менее удобен для человеческого глаза, чем формат CSV. В следующем примере используется файл courses.json, который содержит информацию о некоторых курсах:
[
{
"name": "Introduction to Programming",
"abbreviation": "ItP",
"periods": [1, 3]
},
{
"name": "Advanced Course in Programming",
"abbreviation": "ACiP",
"periods": [2, 4]
},
{
"name": "Database Application",
"abbreviation": "DbApp",
"periods": [1, 2, 3, 4]
}
]Структура JSON-файла теперь может выглядеть для вас довольно знакомой. JSON-файл выше выглядит точно как список Python, который содержит три словаря Python.
В стандартной библиотеке есть модуль для работы с JSON-файлами: json. Функция loads принимает любой аргумент, переданный в формате JSON, и преобразует его в структуру данных Python. Поэтому обработка файла courses.json кодом ниже
import json
with open("courses.json") as my_file:
data = my_file.read()
courses = json.loads(data)
print(courses)вывела бы следующее:
[{'name': 'Introduction to Programming', 'abbreviation': 'ItP', 'periods': [1, 3]}, {'name': 'Advanced Course in Programming', 'abbreviation': 'ACiP', 'periods': [2, 4]}, {'name': 'Database Application', 'abbreviation': 'DbApp', 'periods': [1, 2, 3, 4]}]
Если бы мы также хотели вывести название каждого курса, можно было бы расширить программу циклом for:
for course in courses:
print(course["name"])Introduction to Programming Advanced Course in Programming Database Application
Получение файла из интернета
Стандартная библиотека Python также содержит модули для работы с онлайн-содержимым, и одна полезная функция — urllib.request.urlopen. Рекомендуем посмотреть весь модуль, но следующего примера должно быть достаточно, чтобы разобраться с этой функцией. Ее можно использовать для получения содержимого из интернета, чтобы затем обрабатывать е го в ваших программах.
Следующий код вывел бы содержимое главной страницы Университета Хельсинки:
import urllib.request
my_request = urllib.request.urlopen("https://helsinki.fi")
print(my_request.read())Страницы, предназначенные для человеческого глаза, обычно выглядят не очень красиво, когда выводится их код. Однако в следующих примерах мы будем работать с машиночитаемыми данными из онлайн-источника. Большая часть машиночитаемых данных, доступных онлайн, находится в формате JSON.
Поиск модулей
Официальная документация Python содержит информацию обо всех модулях, доступных в стандартной библиотеке:
Помимо стандартной библиотеки, в интернете полно свободно доступных модулей Python для разных целей. Некоторые часто используемые модули перечислены здесь:
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.