diff --git a/lesson02/file.yaml b/lesson02/file.yaml new file mode 100644 index 0000000..4f0efa3 --- /dev/null +++ b/lesson02/file.yaml @@ -0,0 +1,13 @@ +100: +- 1 +- 2 +- 3 +- 4 +200: 8000 +300: + first: + - 1 + - 2 + - 3 + - 4 + second: 800 diff --git a/lesson02/info_1.txt b/lesson02/info_1.txt new file mode 100644 index 0000000..845390d --- /dev/null +++ b/lesson02/info_1.txt @@ -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 \ No newline at end of file diff --git a/lesson02/info_2.txt b/lesson02/info_2.txt new file mode 100644 index 0000000..0f96fb2 --- /dev/null +++ b/lesson02/info_2.txt @@ -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 \ No newline at end of file diff --git a/lesson02/info_3.txt b/lesson02/info_3.txt new file mode 100644 index 0000000..c2a964a --- /dev/null +++ b/lesson02/info_3.txt @@ -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 \ No newline at end of file diff --git a/lesson02/new_file.csv b/lesson02/new_file.csv new file mode 100644 index 0000000..0f481d5 --- /dev/null +++ b/lesson02/new_file.csv @@ -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 diff --git a/lesson02/orders.json b/lesson02/orders.json new file mode 100644 index 0000000..4a60f00 --- /dev/null +++ b/lesson02/orders.json @@ -0,0 +1,32 @@ +{ + "orders": [ + { + "item": "\u0411\u0430\u043d\u0430\u043d", + "quantity": 3, + "price": 300, + "buyer": "Pupkin", + "date": "08.03.2019" + }, + { + "item": "\u042f\u0431\u043b\u043e\u043a\u043e", + "quantity": 2, + "price": 700, + "buyer": "Pupkin", + "date": "08.03.2019" + }, + { + "item": "\u0410\u043f\u0435\u043b\u044c\u0441\u0438\u043d", + "quantity": 3, + "price": 1200, + "buyer": "Pupkin", + "date": "08.03.2019" + }, + { + "item": "\u0413\u0440\u0443\u0448\u0430", + "quantity": 4, + "price": 500, + "buyer": "Pupkin", + "date": "08.03.2019" + } + ] +} \ No newline at end of file diff --git a/lesson02/task01.py b/lesson02/task01.py new file mode 100644 index 0000000..fa4e888 --- /dev/null +++ b/lesson02/task01.py @@ -0,0 +1,65 @@ +#!/usr/bin/python3 +__author__ = "Андрей Петров" + +import csv +import re + + +""" +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(). ### +""" + + +def write_to_csv(file, data): + with open(file, 'w') as f_n: + f_n_writer = csv.writer(f_n) + for nrow in data: + f_n_writer.writerow(nrow) + + +def get_data(lst): + os_prod_list = [] + os_name_list = [] + os_code_list = [] + os_type_list = [] + main_data = [['Изготовитель системы', 'Название ОС', 'Код продукта', 'Тип системы']] + for file in lst: + datafile = open(file) + for row in datafile: + row = row.rstrip() + if re.match('Изготовитель системы', row): + os_prod_list.append(re.search(r'(Изготовитель системы).\s*(.*)', row).group(2)) + elif re.match('Название ОС', row): + os_name_list.append(re.search(r'(Название ОС).\s*(.*)', row).group(2)) + elif re.match('Код продукта', row): + os_code_list.append(re.search(r'(Код продукта).\s*(.*)', row).group(2)) + elif re.match('Тип системы', row): + os_type_list.append(re.search(r'(Тип системы).\s*(.*)', row).group(2)) + + for k in range(len(lst)): + main_data.append([ + os_prod_list[k], + os_name_list[k], + os_code_list[k], + os_type_list[k] + ]) + return main_data + + +if __name__ == "__main__": + res = get_data(['info_1.txt', 'info_2.txt', 'info_3.txt']) + write_to_csv('new_file.csv', res) + + with open('new_file.csv') as f_n: + print(f_n.read()) diff --git a/lesson02/task02.py b/lesson02/task02.py new file mode 100644 index 0000000..65b1628 --- /dev/null +++ b/lesson02/task02.py @@ -0,0 +1,35 @@ +#!/usr/bin/python3 +__author__ = "Андрей Петров" + +import json + +""" +2. Задание на закрепление знаний по модулю json. Есть файл orders в формате JSON с информацией о заказах. Написать +скрипт, автоматизирующий его заполнение данными. Для этого: +Создать функцию write_order_to_json(), в которую передается 5 параметров — товар (item), количество (quantity), +цена (price), покупатель (buyer), дата (date). Функция должна предусматривать запись данных в виде словаря +в файл orders.json. При записи данных указать величину отступа в 4 пробельных символа; +Проверить работу программы через вызов функции write_order_to_json() с передачей в нее значений каждого параметра. +""" + + +def write_order_to_json(item, quantity, price, buyer, date): + with open('orders.json') as f_n: + dict_to_json = json.load(f_n) + print(dict_to_json) + dict_to_json['orders'].append({ + 'item': item, + 'quantity': quantity, + 'price': price, + 'buyer': buyer, + 'date': date, + }) + with open('orders.json', 'w') as f_w: + json.dump(dict_to_json, f_w, indent=4) + + +if __name__ == "__main__": + write_order_to_json('Банан', 3, 300, 'Pupkin', '08.03.2019') + write_order_to_json('Яблоко', 2, 700, 'Pupkin', '08.03.2019') + write_order_to_json('Апельсин', 3, 1200, 'Pupkin', '08.03.2019') + write_order_to_json('Груша', 4, 500, 'Pupkin', '08.03.2019') diff --git a/lesson02/task03.py b/lesson02/task03.py new file mode 100644 index 0000000..59d2de8 --- /dev/null +++ b/lesson02/task03.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 +__author__ = "Андрей Петров" + +import yaml + +""" +### 3. Задание на закрепление знаний по модулю yaml. Написать скрипт, автоматизирующий сохранение данных +в файле YAML-формата. Для этого: +Подготовить данные для записи в виде словаря, в котором первому ключу соответствует список, второму — целое число, +третьему — вложенный словарь, где значение каждого ключа — это целое число с юникод-символом, отсутствующим +в кодировке ASCII (например, €); +Реализовать сохранение данных в файл формата YAML — например, в файл file.yaml. При этом обеспечить стилизацию файла +с помощью параметра default_flow_style, а также установить возможность работы с юникодом: allow_unicode = True; +Реализовать считывание данных из созданного файла и проверить, совпадают ли они с исходными. +""" + +def write_dict_to_yaml(dict, file): + with open(file, 'w') as f_n: + yaml.dump(dict, f_n, default_flow_style=False, allow_unicode = True) + + with open(file) as f_n: + f_n_content = yaml.load(f_n) + + print(f_n_content == dict) + +if __name__ == "__main__": + my_dict = { + '100€': [1, 2, 3, 4], + '200€': 8000, + '300€': { + 'first': [1,2,3,4], + 'second': 800, + } + } + + write_dict_to_yaml(my_dict, 'file.yaml')