diff --git a/less-05/task-01.py b/less-05/task-01.py new file mode 100644 index 0000000..c9467ea --- /dev/null +++ b/less-05/task-01.py @@ -0,0 +1,30 @@ +# Создать программный файл в текстовом формате, +# записать в него построчно данные, вводимые пользователем. +# Об окончании ввода данных будет свидетельствовать пустая строка. + +import os + +n_str = 0 +n_char = 0 +file_name = 'task01.txt' + +def get_string_user(): + global n_str + global n_char + m_str = input(f"{n_str+1:03}->>>") + n_str += 1 + # количество символов с учетом перевода строк под Win используеться CR LF + # а это 2 байта а вот под лин будет только что мы укажем "\n" - 1 байт (LF) + lb = 2 if os.name == "nt" else 1 + n_char += len(m_str) + (lb if len(m_str) > 0 and n_str>1 else 0) + return m_str + +print('введите строки для записи в файл, окончание ввода пустая строка') +with open(file_name, "w", encoding='utf-8') as f_obj: + user_str = get_string_user() + while user_str != "": + if n_str>1: f_obj.writelines("\n") + f_obj.writelines(user_str) + user_str = get_string_user() +f_size = os.path.getsize(file_name) +print('в фаил записано {} символов, {} строк, размер файла на диске {} байт'.format(n_char, n_str-1, f_size)) diff --git a/less-05/task-02.py b/less-05/task-02.py new file mode 100644 index 0000000..0b3c917 --- /dev/null +++ b/less-05/task-02.py @@ -0,0 +1,21 @@ +# Создать текстовый файл (не программно), сохранить в нём несколько строк, +# выполнить подсчёт строк и слов в каждой строке. + + +file_name = 'examples5/text_7.txt' +lines = 0 +words = 0 + +try: + with open(file_name, "r", encoding='utf-8') as file: + for line in file: + words_in_line = len(line.split()) + lines += 1 + words += words_in_line + print(f'строка {lines} содержит {words_in_line} слов') +except Exception: + print('Проблемы данными') +else: + print(f'Из файла прочитано {lines} строка и всего {words} слов') + + diff --git a/less-05/task-03.py b/less-05/task-03.py new file mode 100644 index 0000000..4e3e469 --- /dev/null +++ b/less-05/task-03.py @@ -0,0 +1,21 @@ +# Создать текстовый файл (не программно). Построчно записать фамилии сотрудников +# и величину их окладов (не менее 10 строк). Определить, кто из сотрудников имеет оклад +# менее 20 тысяч, вывести фамилии этих сотрудников. Выполнить подсчёт средней величины дохода сотрудников. + +file_name = 'examples5/text_3.txt' +employ_dict = {} + +try: + with open(file_name, "r", encoding='utf-8') as file: + for line in file: + line_sp = line.split() + employ_dict[line_sp[0]] = float(line_sp[1]) +except Exception: + print('Проблемы данными') +else: + print(f'всего прочитано {len(employ_dict)} строк') + print('Сотрудники получающие менее 20 000') + for el in employ_dict.items(): + if float(el[1]) < 20000.0: + print(' '*5, f'{el[0]}') + print(f'Средняя ЗП по полному списку: {sum(employ_dict.values())/len(employ_dict):.2f}') \ No newline at end of file diff --git a/less-05/task-04.py b/less-05/task-04.py new file mode 100644 index 0000000..f5f7de2 --- /dev/null +++ b/less-05/task-04.py @@ -0,0 +1,22 @@ +# Создать (не программно) текстовый файл со следующим содержимым: +# +#One — 1 +#Two — 2 +#Three — 3 +#Four — 4 +# +#Напишите программу, открывающую файл на чтение и считывающую построчно данные. +#При этом английские числительные должны заменяться на русские. +#Новый блок строк должен записываться в новый текстовый файл. + + +file_name = 'examples5/text_4.txt' +dig = {'One':'Один', 'Two':'Два', 'Three':'Три', 'Four':'Четыре', 'Five':'Пять', + 'Six':'Шесть', 'Seven':'Семь', 'Eight':'Восемь', 'Nine':'Девять',} + +with open(file_name, "r", encoding='utf-8') as fr, open("task04.txt", "w", encoding='utf-8') as fw: + for line in fr: + eng, sep, num = line.split() + # print(f'{dig[eng]} {sep} {num}') + print(f'{dig[eng]} {sep} {num}', file=fw) + diff --git a/less-05/task-05.py b/less-05/task-05.py new file mode 100644 index 0000000..1ab25ac --- /dev/null +++ b/less-05/task-05.py @@ -0,0 +1,12 @@ +# Создать (программно) текстовый файл, записать в него программно набор чисел, +# разделённых пробелами. Программа должна подсчитывать сумму чисел в файле и выводить её на экран. + +from random import randint + +with open("task05.txt", "w+", encoding='utf-8') as f: + # запишем + f.write(f"{' '.join(map(str,[randint(1,99) for _ in range(100)]))}") + # вернемся в начало и прочтем файл + f.seek(0) + numbers = [int(i) for i in f.read().split()] + print(f'Сумма чисел из файла {sum(numbers)}') diff --git a/less-05/task-06.py b/less-05/task-06.py new file mode 100644 index 0000000..58c2175 --- /dev/null +++ b/less-05/task-06.py @@ -0,0 +1,24 @@ +# Сформировать (не программно) текстовый файл. В нём каждая строка должна описывать учебный предмет +# и наличие лекционных, практических и лабораторных занятий по предмету. Сюда должно входить и количество +# занятий. Необязательно, чтобы для каждого предмета были все типы занятий. +# Сформировать словарь, содержащий название предмета и общее количество занятий по нему. Вывести его на экран. +# +# Примеры строк файла: +# Информатика: 100(л) 50(пр) 20(лаб). +# Физика: 30(л) — 10(лаб) +# Физкультура: — 30(пр) — +# Пример словаря: {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} + +file_name = 'examples5/text_6.txt' +dig_les = {} +with open(file_name, "r", encoding='utf-8') as fr: + for line in fr: + num_les = 0 + item, desc = line.split(':') + desc = desc.split() + for les in desc: + if '-' in les: continue + num, rest = les.split('(') + num_les += int(num) + dig_les[item] = num_les +print(dig_les) \ No newline at end of file diff --git a/less-05/task-07.py b/less-05/task-07.py new file mode 100644 index 0000000..b6baf76 --- /dev/null +++ b/less-05/task-07.py @@ -0,0 +1,36 @@ +# Создать вручную и заполнить несколькими строками текстовый файл, в котором каждая строка будет содержать +# данные о фирме: название, форма собственности, выручка, издержки. +# +# Пример строки файла: firm_1 ООО 10000 5000. +# +# Необходимо построчно прочитать файл, вычислить прибыль каждой компании, а также среднюю прибыль. +# Если фирма получила убытки, в расчёт средней прибыли её не включать. +# Далее реализовать список. Он должен содержать словарь с фирмами и их прибылями, а также словарь со средней прибылью. +# Если фирма получила убытки, также добавить её в словарь (со значением убытков). +# +# Пример списка: [{“firm_1”: 5000, “firm_2”: 3000, “firm_3”: 1000}, {“average_profit”: 2000}]. +# Итоговый список сохранить в виде json-объекта в соответствующий файл. +# +# Пример json-объекта: +# [{"firm_1": 5000, "firm_2": 3000, "firm_3": 1000}, {"average_profit": 2000}] +# Подсказка: использовать менеджер контекста. +import json + + +file_name = "examples5/text_7.txt" +dig_firm = {} +num_firm = 0 +aver_profit = 0 +with open(file_name, "r", encoding='utf-8') as fr: + for line in fr: + name, type_own, rev, cost = line.split() + profit = int(rev)-int(cost) + if profit >= 0: + aver_profit += profit + num_firm += 1 + dig_firm[name] = profit +aver_profit /= num_firm + +with open('examples5/task07.json', "w", encoding='utf-8') as f: + json.dump([dig_firm, {"average_profit": aver_profit}], f, ensure_ascii=False) +