Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Васильев Ю. - Python для data science (Библиотека программиста) - 2023.pdf
Скачиваний:
7
Добавлен:
07.04.2024
Размер:
7.21 Mб
Скачать

4

Доступ к данным из файлов и API

Получение доступа к данным и добавление их

в скрипт — первый шаг анализа данных. В этой главе

рассматриваются несколько способов импортирования

данных из файлов и других источников в приложение

на Python, а также способы экспортирования данных в файлы. Мы увидим, как получить доступ к содержимому файлов разных типов, включая те, что хранятся локально на

компьютере, и те, что мы получаем удаленно через HTTP-запросы. Вы также узнаете,­ как получать данные, отправляя запросы к API, доступным по URLадресу. Наконец, вы научитесь преобразовывать различные типы данных в структуру pandas DataFrames.

Импортирование данных с помощью функции open()

Встроенная в Python функция open() служит для открытия разных типов файлов, с которыми предстоит работать в скрипте. Функция возвращает объект file, который оснащен методами, позволяющими получить доступ к содержимому файла и совершать с ним различные операции. Однако если файл содержит данные в определенных форматах, таких как CSV, JSON или HTML, понадобится также импортировать соответствующую библиотеку. Для обработки файлов

Импортирование данных с помощью функции open()      89

с открытым текстом специальная библиотека не нужна, методов объекта file, возвращаемого open(), будет достаточно.

Текстовые файлы

Текстовые файлы (.txt) — это, пожалуй, самый распространенный тип файлов. Для Python текстовый файл — это последовательность строковых объектов. Каждый строковый объект представляет собой одну строку текстового файла, то есть последовательность символов, заканчивающуюся скрытым символом новой строки (\n) или жестким переносом (намеренным разрывом строки).

ПРИМЕЧАНИЕ

Однастрокатекстовогофайламожетотображатьсянаэкраневвиденескольких строк, что зависит от ширины окна, но Python будет воспринимать ее как одну, если она не разбита символами новой строки.

В Python есть встроенные функции для чтения, записи и добавления текстовых файлов. В этом разделе мы рассмотрим, как читать данные из текстового файла. Начнем с ввода следующего отрывка в текстовом редакторе, а затем сохраним его как excerpt.txt. Обязательно дважды нажмите ENTER в конце первого абзаца, чтобы создать пустую строку между абзацами (но не нажимайте ENTER для разрыва длинных строк):

Today, robots can talk to humans using natural language, and they're getting smarter. Even so, very few people understand how these robots work or how they might use these technologies in their own projects.

Natural language processing (NLP) – a branch of artificial intelligence that helps machines understand and respond to human language – is the key technology that lies at the heart of any digital assistant product.1

Для человека отрывок состоит из двух абзацев, включающих всего три предложения. Однако для Python отрывок состоит из двух непустых строк и одной пустой строки, расположенной между ними. Прочитать содержимое всего файла в Python-скрипт и вывести его на экран можно так:

1«Сейчас роботы могут разговаривать с людьми на естественном языке, и они становятся все умнее. Но при этом очень немногие люди понимают, как работают эти роботы либо как использовать подобные технологии в собственных проектах.

Обработка естественного языка (NLP) — раздел искусственного интеллекта, необходимый для того, чтобы машины понимали и отвечали на человеческий язык, — это ключевая технология, которая лежит в основе любого продукта — цифрового помощника». — Примеч. пер.

90      Глава 4. Доступ к данным из файлов и API

path = "/path/to/excerpt.txt" with open( path, "r") as f:content = f.read() print(content)

Сначала указываем путь к файлу . Вам нужно будет заменить /path/to/excerpt.txt на собственный путь в зависимости от места сохранения файла. Путь передается

вфункцию open()в качестве первого параметра . Второй параметр отвечает за то, как файл будет использоваться. По умолчанию параметр устанавливается в режим чтения текста, то есть содержимое файла будет открыто только для чтения (не для редактирования) и будет восприниматься как набор строк. Для открытия файла

врежиме чтения можно явно указать "r", но в этом нет строгой необходимости.

(Если передать "rt", то будет явно задан режим чтения именно текста.) Функция open() возвращает объект file в указанном режиме . Затем используем метод read() объекта file для чтения всего содержимого файла .

Использование ключевого слова with с open() гарантирует, что объект file будет правильно закрыт по окончании работы с ним, даже если было вызвано исключение. В противном случае для закрытия объекта файла и освобождения потребляемых им системных ресурсов необходимо вызвать f.close().

Следующий фрагмент кода построчно читает содержимое того же файла с расположением /path/to/excerpt.txt, выводя только непустые строки:

path = "/path/to/excerpt.txt" with open(path,"r") as f:

for i, line in enumerate(f):if line.strip():

print(f"Line {i}: ", line.strip())

В этом примере мы добавляем порядковый номер к каждой строке с помощью функции enumerate() . Затем отфильтровываем пустые строки с помощью метода strip() , который удаляет пробельные символы из начала и конца каждой строки. Вторая пустая строка текстового файла содержит только один символ — новую строку, которую strip()удаляет. Таким образом, вторая строка становится пустой. Оператор if определит ее как false и пропустит. Мы получим следующий вывод. Как видите, Line 1 отсутствует:

Line 0: Today, robots can talk to humans using natural language, and they're getting smarter. Even so, very few people understand how these robots work or how they might use these technologies in their own projects.

Line 2: Natural language processing (NLP) - a branch of artificial intelligence that helps machines understand and respond to human language - is the key technology that lies at the heart of any digital assistant product.

Импортирование данных с помощью функции open()      91

Вместо того чтобы печатать строки, их можно отправить в список, используя списковое включение:

path = "/path/to/excerpt.txt" with open(path,"r") as f:

lst = [line.strip() for line in f if line.strip()]

Каждая непустая строка станет отдельным элементом списка.

Файлы с табличными данными

Файл с табличными данными — это файл, в котором данные структурированы по строкам. Каждая строка обычно содержит информацию о ком-то или о чемто, как показано ниже:

Jeff Russell, jeff.russell, sales

Jane Boorman, jane.boorman, sales

Это пример плоского файла, наиболее распространенного типа файла табличных данных. Такое название обусловлено структурой: плоские файлы содержат записи с простой (плоской) структурой, в них нет вложенных структур или подзаписей. Как правило, плоский файл — это текстовый файл в формате CSV или TSV (tab-separated values), содержащий по одной записи в строке. В файлах CSV значения в записи разделяются запятыми, а в файлах TSV в качестве разделителя используется табуляция. Оба формата имеют широкую поддержку; они часто используются для перемещения табличных данных между приложениями.

Ниже приведен пример данных в формате CSV, где первая строка содержит заголовки, которые описывают содержание строк, расположенных под ними. Описания заголовков используются в качестве ключей для получения данных, которые следуют за этими заголовками. Скопируйте эти данные в текстовый редактор и сохраните их как cars.csv:

Year,Make,Model,Price

1997,Ford,E350,3200.00

1999,Chevy,Venture,4800.00

1996,Jeep,Grand Cherokee,4900.00

Функция Python open() открывает файлы CSV в текстовом режиме. Затем можно преобразовать данные в объект Python с помощью функции чтения из модуля csv, как показано здесь:

92      Глава 4. Доступ к данным из файлов и API

import csv

path = "/path/to/cars.csv"

with open(path, "r") as csv_file: csv_reader = csv.DictReader(csv_file) cars = []

for row in csv_reader:cars.append(dict(row))

print(cars)

Функция open()возвращает объект file , который мы передаем считывателю из модуля csv. В данном случае используется DictReader() , преобразующий данные в каждой строке в словарь, с использованием в качестве ключей соответствующих заголовков из первой строки. Далее мы добавляем эти словари в список . В результате получается следующий список словарей:

[

{'Year': '1997', 'Make': 'Ford', 'Model': 'E350', 'Price': '3200.00'}, {'Year': '1999', 'Make': 'Chevy', 'Model': 'Venture', 'Price': '4800.00'}, {'Year': '1996', 'Make': 'Jeep', 'Model': 'Grand Cherokee', 'Price':

'4900.00'}

]

В качестве альтернативы можно использовать метод reader() из модуля csv. Тогда файл CSV преобразуется в список списков, где каждый внутренний список будет представлять строку и первой будет строка заголовка:

import csv

path = "cars.csv"

with open(path, "r") as csv_file: csv_reader = csv.reader(csv_file) cars = []

for row in csv_reader: cars.append(row)

print(cars)

Вывод:

[

['Year', 'Make', 'Model', 'Price'] ['1997', 'Ford', 'E350', '3200.00']

['1999', 'Chevy', 'Venture', '4800.00']

['1996', 'Jeep', 'Grand Cherokee', '4900.00']

]