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

мы рассмотрим следующие основные темы:
- Чтение и запись файлов в Python
- Обработка файлов в Airflow
- Процессоры NiFi для обработки файлов
- Чтение и запись данных в базы данных в Python
- Базы данных в Airflow
- Процессоры баз данных в NiFi
Запись и чтение файлов в Python
В этом разделе мы сначала будем записывать данные в файлы, а затем читать их. Написав его, мы поймем структуру данных, и вы будете знать, что пытаетесь прочитать.
Для записи данных мы будем использовать библиотеку с именем faker. faker позволяет нам легко создавать поддельные данные для общих полей. Мы можем сгенерировать адрес, просто вызвав address(), или женское имя, вызвав name_female(). Это упростит создание поддельных данных и в то же время сделает их более реалистичными.
Чтобы установить фейкер, вы можете использовать pip:
pip3 install faker
Написание файлов CSV с использованием библиотеки Python CSV.
Наиболее распространенный тип файла, с которым мы столкнемся, — это значения, разделенные запятыми (CSV). CSV — это файл, состоящий из полей, разделенных запятыми. Поскольку запятые довольно часто встречаются в тексте, нам нужно иметь возможность обрабатывать их в CSV-файлах. Этого можно добиться с помощью escape-символов, обычно пары кавычек вокруг текстовых строк, которые могут содержать запятую, которая не используется для обозначения нового поля. Эти кавычки называются escape-символами. Стандартная библиотека Python для обработки CSV упрощает процесс обработки данных CSV.
Чтобы написать CSV с библиотекой CSV, нам нужно выполнить следующие шаги:
Режим записи — w, но вы также можете открыть файл для чтения с помощью r, добавить в конец с помощью a или прочитать и записать с помощью r+:
output = open('myCSV.CSV',mode=' ж')
Создайте CSV_writer. В качестве разделителя по умолчанию используется запятая (в конце концов, это средство записи CSV), а цитирование по умолчанию равно QUOTE_ MINIMAL, которое добавляет кавычки только при наличии специальных символов или разделителя в поле. Таким образом, вы можете создать модуль записи, как показано ниже:
mywriter=csv.writer(output)
Запись заголовка аналогична записи любой другой строки: определите значения, затем мы будем использовать writerow(), как показано ниже:
header=['name','age']
mywriter .writerow(заголовок)
Запишите данные в файл. Теперь вы можете записать строку данных, используя writerow(0) и передав некоторые данные, как показано ниже:
data=['Bob Smith',40]
mywriter.writerow(data)
вывод.close()
Если мы пытаемся записать много данных, вы, скорее всего, захотите перебрать какое-то условие или перебрать существующие данные. В следующем примере мы будем использовать Faker для создания 1000 записей:
from faker import Faker
import csv
output=open('data.CSV','w')
fake=Faker()
header=['name','age','street','city','state','zip','lng','lat']
mywriter=csv.writer(output)
mywriter.writerow(header)
for r in range(1000):
mywriter.writerow([fake.name(),fake.random_int(min=18,
max=80, step=1), fake.street_address(), fake.city(),fake.
state(),fake.zipcode(),fake.longitude(),fake.latitude()])
output.close()
Чтение CSV
Теперь, когда мы написали CSV, мы можем прочитать его с помощью Python. Чтение CSV чем-то похоже на его запись. Далее выполняются те же шаги с небольшими изменениями:
Откройте файл, используя «с». Использование with имеет некоторые дополнительные преимущества, но на данный момент мы пожинаем плоды того, что нам не нужно использовать close() для файла. Если мы не указываем режим, открываем значения по умолчанию для чтения (r). После открытия нам нужно будет указать, как обращаться к файлу; в этом случае мы откроем файл data.CSV и будем ссылаться на него как f:
с open(‘data.csv’) как f:
Вместо простого чтения() мы будем использовать DictReader(). Используя средство чтения словаря, мы сможем вызывать поля в данных по имени, а не по положению. Например, вместо того, чтобы вызывать первый элемент в строке как row[0], теперь мы можем называть его как row[‘name’]. Как и в случае с модулем записи, обычно достаточно значений по умолчанию, и нам нужно будет только указать файл для чтения. Следующий код открывает data.CSV, используя имя переменной f: myreader=CSV.DictReader(f)
Возьмите заголовки, прочитав одну строку с помощью next(): headers=next(myreader)
Теперь вы можете просмотреть остальные строки, используя следующее:
для строки в myreader:
Наконец, вы можете напечатать имена, используя следующее:
print(row[‘name’])
Теперь у вас есть словарь Python, которым вы можете манипулировать так, как вам нужно.
Чтение и запись CSV с использованием pandas DataFrames
pandas DataFrames — это мощный инструмент не только для чтения и записи данных, но и для запросов и манипулирования данными. Это требует больших накладных расходов, чем встроенная библиотека CSV, но бывают случаи, когда это может стоить компромисса. Вы можете установить его следующим образом:
pip3 install pandas
Мы можем думать о pandas DataFrame как о листе Excel или таблице. У нас будут строки, столбцы и индекс. Чтобы загрузить данные CSV в DataFrame, необходимо выполнить следующие шаги:
Импорт панд (обычно как pd):
импорт панд как pd
Затем прочитайте файл с помощью read_csv(). Метод read_csv() принимает несколько необязательных параметров и один обязательный параметр — файл или файлоподобный буфер:
df=pd.read_csv()(‘data.CSV’)
Давайте теперь посмотрим на первые 10 записей, используя следующее:
df.head(10)
Мы можем создать DataFrame в Python, выполнив следующие шаги:
Создайте словарь данных. Словарь — это структура данных, которая хранит данные в виде пары ключ:значение. Значение может относиться к любому типу данных Python, например к массиву. В словарях есть методы для поиска ключей(), значений() и элементов(). Они также позволяют найти значение ключа, используя имя ключа в квадратных скобках — например, словарь['key'] вернет значение для этого ключа:
data= {'Name': ['Пол','Боб','Сьюзан','Иоланда'], 'Возраст': [23,45,18,21]}
Передайте данные в DataFrame:
df=pd.DataFrame(data)
Столбцы указаны как ключи в словаре. Теперь, когда у вас есть DataFrame, вы можете записать содержимое в CSV, используя to_csv() и передав имя файла. В случае, когда вам не нужно записывать имена строк или индекс в файл, передайте параметр index в to_csv(), как показано ниже:
df.to_csv('fromdf.CSV',index = Ложь)
Написание JSON с помощью Python
Другим распространенным форматом данных, с которым вы, вероятно, будете иметь дело, является нотация объектов JavaScript (JSON). Вы чаще всего будете видеть JSON при вызовах интерфейсов прикладного программирования (API); однако он может существовать и в виде файла.
Чтобы написать JSON с использованием Python и стандартной библиотеки, необходимо выполнить следующие шаги:
Импортируйте библиотеку и откройте файл, в который мы будем писать. Мы также создаем объект Faker:
from faker import Faker
import json
output=open('data.JSON','w')
fake=Faker( )
Мы создадим 1000 записей, как и в примере с CSV, поэтому нам нужно будет создать словарь для хранения данных. Как упоминалось ранее, значением ключа может быть любой тип данных Python, включая массив значений. После создания словаря для хранения записей мы добавляем ключ «records» и инициализируем его пустым массивом, как показано ниже:
alldata={}
alldata['records']=[ ]
Чтобы записать записи, вы используете Faker для создания словаря, а затем добавляете его в массив:
for x in range(1000):
data={"name":fake.name(),"age":fake.random_int
(min=18, max=80, step=1),
"street":fake.street_address(),
"city":fake.city(),"state":fake.state(),
"zip":fake.zipcode(),
"lng":float(fake.longitude()),
"lat":float(fake.latitude())}
alldata['records'].append(data)
Наконец, чтобы записать JSON в файл, используйте метод JSON.dump(). Передайте данные, которые вы хотите записать, и файл для записи:
json.dump(alldata,output)
Теперь у вас есть файл data.JSON с массивом из 1000 записей. Вы можете прочитать этот файл, выполнив следующие действия:
Откройте файл, используя следующее:
с помощью open("data.JSON","r") как f:
Используйте JSON.load() и передайте ссылку на файл методу: data=json.load(f)
Проверьте json, просмотрев первую запись, используя следующее: data[‘records’][0]
Или просто используйте имя:
data[‘records’][0][‘name’]
Панды DataFrames
Чтение и запись JSON с DataFrames аналогичны тому, что мы делали с CSV. Единственное отличие состоит в том, что вы меняете to_csv на to_json() и read_csv() на read_json().
Если у вас есть чистый, хорошо отформатированный файл JSON, вы можете прочитать его, используя следующий код:
df=pd.read_json(‘data.JSON’)
В случае файла data.JSON записи вложены в словарь записей. Таким образом, загрузка JSON не так проста, как предыдущий код. Нам понадобится несколько дополнительных шагов, которые заключаются в следующем. Чтобы загрузить данные JSON из файла, выполните следующие действия:
Используйте библиотеку pandas JSON:
импортируйте pandas.io.json как pd_JSON
Откройте файл и загрузите его с помощью версии JSON.loads() для панд: f=open('data.JSON','r')
data=pd_JSON.loads(f.read())
Чтобы создать DataFrame, нам нужно нормализовать JSON. Нормализация — это то, как мы можем сгладить JSON, чтобы он поместился в таблице. В этом случае мы хотим получить отдельные записи JSON, хранящиеся в словаре записей. Передайте записи этого пути — параметру record_path функции json_normalize():
df=pd_JSON.json_normalize(data,record_path=’records’)