Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions data.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Изготовитель системы,Название ОС,Код продукта,Тип системы
LENOVO,Microsoft Windows 7 Профессиональная,00971-OEM-1982661-00231,x64-based PC
ACER,Microsoft Windows 10 Professional,00971-OEM-1982661-00231,x64-based PC
DELL,Microsoft Windows 8.1 Professional,00971-OEM-1982661-00231,x86-based PC
Expand Down
65 changes: 65 additions & 0 deletions exercise_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
"""
1. Задание на закрепление знаний по модулю CSV. Написать скрипт, осуществляющий выборку определенных данных из файлов
info_1.txt, info_2.txt, info_3.txt и формирующий новый «отчетный» файл в формате CSV. Для этого:
Создать функцию get_data(), в которой в цикле осуществляется перебор файлов с данными, их открытие и считывание данных.
В этой функции из считанных данных необходимо с помощью регулярных выражений извлечь значения параметров
«Изготовитель системы», «Название ОС», «Код продукта», «Тип системы».
Значения каждого параметра поместить в соответствующий список. Должно получиться четыре списка — например,
os_prod_list, os_name_list, os_code_list, os_type_list.
В этой же функции создать главный список для хранения данных отчета — например, main_data — и поместить в него
названия столбцов отчета в виде списка: «Изготовитель системы», «Название ОС», «Код продукта», «Тип системы».
Значения для этих столбцов также оформить в виде списка и поместить в файл main_data (также для каждого файла);
Создать функцию write_to_csv(), в которую передавать ссылку на CSV-файл.
В этой функции реализовать получение данных через вызов функции get_data(), а также сохранение
подготовленных данных в соответствующий CSV-файл; Проверить работу программы через вызов функции write_to_csv().
"""

import csv
import re

import chardet


def get_data(files_l):
main_data = ['Изготовитель системы', 'Название ОС', 'Код продукта', 'Тип системы']
os_prod_list = []
os_name_list = []
os_code_list = []
os_type_list = []
data = []
for file in files_l:
with open(file, 'rb') as f:
data_b = f.read()
encoding = chardet.detect(data_b)['encoding']
with open(file, encoding=encoding) as f:
pattern_1 = re.compile(r'Изготовитель системы:\s*\S*')
pattern_2 = re.compile(r'Название ОС:\s*\S*')
pattern_3 = re.compile(r'Код продукта:\s*\S*')
pattern_4 = re.compile(r'Тип системы:\s*\S*')
for line in f:
if re.match(pattern_1, line) is not None:
os_prod_list.append(line.split(':')[1].strip())
if re.match(pattern_2, line) is not None:
os_name_list.append(line.split(':')[1].strip())
if re.match(pattern_3, line) is not None:
os_code_list.append(line.split(':')[1].strip())
if re.match(pattern_4, line) is not None:
os_type_list.append(line.split(':')[1].strip())
rows = [os_prod_list, os_name_list, os_code_list, os_type_list]
data.append(main_data)
for i in range(len(rows[0])):
line = [row[i] for row in rows]
data.append(line)
return data


def write_to_csv(file):
with open(file, mode="w", encoding='utf-8') as f:
writer = csv.writer(f)
for row in get_data(files_list):
writer.writerow(row)


if __name__ == '__main__':
files_list = ['info_1.txt', 'info_2.txt', 'info_3.txt']
write_to_csv('data.csv')
30 changes: 30 additions & 0 deletions exercise_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""
2. Задание на закрепление знаний по модулю json. Есть файл orders в формате JSON с информацией о заказах.
Написать скрипт, автоматизирующий его заполнение данными. Для этого:
Создать функцию write_order_to_json(), в которую передается 5 параметров — товар (item), количество (quantity),
цена (price), покупатель (buyer), дата (date).
Функция должна предусматривать запись данных в виде словаря в файл orders.json.
При записи данных указать величину отступа в 4 пробельных символа;
Проверить работу программы через вызов функции write_order_to_json() с передачей в нее значений каждого параметра.
"""
import json


def write_order_to_json(item, quantity, price, buyer, date):
with open('orders.json', 'r', encoding='utf-8') as f:
orders = json.load(f)
with open('orders.json', 'w', encoding='utf-8') as f:
orders['orders'].append({
"item": item,
"quantity": quantity,
"price": price,
"buyer": buyer,
"date": date
})
json.dump(orders, f, indent=4, ensure_ascii=False)


if __name__ == '__main__':
write_order_to_json('Стол', 2, 1000, 'Вася', '2020-01-01')
write_order_to_json('Стул', 1, 500, 'Петя', '2020-01-02')
write_order_to_json('Кресло', 3, 1500, 'Коля', '2020-01-03')
33 changes: 33 additions & 0 deletions exercise_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""
3. Задание на закрепление знаний по модулю yaml. Написать скрипт, автоматизирующий сохранение данных
в файле YAML-формата. Для этого:
Подготовить данные для записи в виде словаря, в котором первому ключу соответствует список, второму — целое число,
третьему — вложенный словарь, где значение каждого ключа — это целое число с юникод-символом,
отсутствующим в кодировке ASCII (например, €);
Реализовать сохранение данных в файл формата YAML — например, в файл file.yaml.
При этом обеспечить стилизацию файла с помощью параметра default_flow_style, а также установить
возможность работы с юникодом: allow_unicode = True;
Реализовать считывание данных из созданного файла и проверить, совпадают ли они с исходными.
"""

import yaml


def save_yaml(var):
with open('file.yaml', 'w', encoding='utf-8') as f:
yaml.dump(var, f, default_flow_style=False, allow_unicode=True, sort_keys=False)


def read_yaml(file):
with open(file, 'r', encoding='utf-8') as f:
return yaml.load(f, Loader=yaml.SafeLoader)


if __name__ == '__main__':
data = {'Имена': ['Вася', 'Петя', 'Зина'],
'Количество': 3,
'Заначка': {'Вася': '1000$', 'Петя': '500€', 'Зина': '10000₽'}}
save_yaml(data)
out = read_yaml('file.yaml')
if data == out:
print('Данные совпадают')
9 changes: 9 additions & 0 deletions file.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Имена:
- Вася
- Петя
- Зина
Количество: 3
Заначка:
Вася: 1000$
Петя: 500€
Зина: 10000₽
42 changes: 42 additions & 0 deletions info_1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
��� ����: Comp1
�������� ��: Microsoft Windows 7 ����������������
������ ��: 6.1.7601 Service Pack 1 ������ 7601
������������ ��: Microsoft Corporation
��������� ��: ������� ������� �������
������ ��: Multiprocessor Free
������������������ ��������: User
������������������ �����������:
��� ��������: 00971-OEM-1982661-00231
���� ���������: 11.10.2013, 10:18:05
����� ������ �������: 0 ��., 4 ���., 41 ���, 0 ���.
������������ �������: LENOVO
������ �������: 3538F2G
��� �������: x64-based PC
���������(�): ����� ����������� - 1.
[01]: Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~3400 ���
������ BIOS: LENOVO - 1390
����� Windows: C:\Windows
��������� �����: C:\Windows\system32
���������� ��������: \Device\HarddiskVolume1
���� �������: ru;�������
���� �����: en-us;���������� (���)
������� ����: (UTC+04:00) ���������, ������, �����-���������
������ ����� ���������� ������: 3 914 ��
��������� ���������� ������: 2 299 ��
����������� ������: ����. ������: 7 826 ��
����������� ������: ��������: 6 139 ��
����������� ������: ������������: 1 687 ��
������������ ����� ��������: �/�
�����: net
������ ����� � ����: �/�
�����������(�): ����� ������������� ����������� - 74.
[01]: KB982861
[02]: 982861
. . .
[74]: KB982018
����������� ������� ��������: ����� ������� ��������� - 1.
[01]: Realtek PCIe GBE Family Controller
��� �����������: ����������� �� ��������� ����
DHCP �������: ���
IP-�����
[01]: 192.168.0.4
42 changes: 42 additions & 0 deletions info_2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
��� ����: Comp1
�������� ��: Microsoft Windows 10 Professional
������ ��: 16299
������������ ��: Microsoft Corporation
��������� ��: ������� ������� �������
������ ��: Multiprocessor Free
������������������ ��������: User
������������������ �����������:
��� ��������: 00971-OEM-1982661-00231
���� ���������: 11.10.2013, 10:18:05
����� ������ �������: 0 ��., 4 ���., 41 ���, 0 ���.
������������ �������: ACER
������ �������: 3538F2G
��� �������: x64-based PC
���������(�): ����� ����������� - 1.
[01]: Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~3400 ���
������ BIOS: LENOVO - 1390
����� Windows: C:\Windows
��������� �����: C:\Windows\system32
���������� ��������: \Device\HarddiskVolume1
���� �������: ru;�������
���� �����: en-us;���������� (���)
������� ����: (UTC+04:00) ���������, ������, �����-���������
������ ����� ���������� ������: 3 914 ��
��������� ���������� ������: 2 299 ��
����������� ������: ����. ������: 7 826 ��
����������� ������: ��������: 6 139 ��
����������� ������: ������������: 1 687 ��
������������ ����� ��������: �/�
�����: net
������ ����� � ����: �/�
�����������(�): ����� ������������� ����������� - 74.
[01]: KB982861
[02]: 982861
. . .
[74]: KB982018
����������� ������� ��������: ����� ������� ��������� - 1.
[01]: Realtek PCIe GBE Family Controller
��� �����������: ����������� �� ��������� ����
DHCP �������: ���
IP-�����
[01]: 192.168.0.4
42 changes: 42 additions & 0 deletions info_3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
��� ����: Comp1
�������� ��: Microsoft Windows 8.1 Professional
������ ��: ������ 10001
������������ ��: Microsoft Corporation
��������� ��: ������� ������� �������
������ ��: Multiprocessor Free
������������������ ��������: User
������������������ �����������:
��� ��������: 00971-OEM-1982661-00231
���� ���������: 11.10.2013, 10:18:05
����� ������ �������: 0 ��., 4 ���., 41 ���, 0 ���.
������������ �������: DELL
������ �������: 3538F2G
��� �������: x86-based PC
���������(�): ����� ����������� - 1.
[01]: Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~3400 ���
������ BIOS: LENOVO - 1390
����� Windows: C:\Windows
��������� �����: C:\Windows\system32
���������� ��������: \Device\HarddiskVolume1
���� �������: ru;�������
���� �����: en-us;���������� (���)
������� ����: (UTC+04:00) ���������, ������, �����-���������
������ ����� ���������� ������: 3 914 ��
��������� ���������� ������: 2 299 ��
����������� ������: ����. ������: 7 826 ��
����������� ������: ��������: 6 139 ��
����������� ������: ������������: 1 687 ��
������������ ����� ��������: �/�
�����: net
������ ����� � ����: �/�
�����������(�): ����� ������������� ����������� - 74.
[01]: KB982861
[02]: 982861
. . .
[74]: KB982018
����������� ������� ��������: ����� ������� ��������� - 1.
[01]: Realtek PCIe GBE Family Controller
��� �����������: ����������� �� ��������� ����
DHCP �������: ���
IP-�����
[01]: 192.168.0.4
25 changes: 25 additions & 0 deletions orders.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"orders": [
{
"item": "Стол",
"quantity": 2,
"price": 1000,
"buyer": "Вася",
"date": "2020-01-01"
},
{
"item": "Стул",
"quantity": 1,
"price": 500,
"buyer": "Петя",
"date": "2020-01-02"
},
{
"item": "Кресло",
"quantity": 3,
"price": 1500,
"buyer": "Коля",
"date": "2020-01-03"
}
]
}