Skip to content

lesson_5 #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
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
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Текущий файл",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"python.pythonPath": "H:\\Python\\Python64_365\\python.exe"
}
4 changes: 4 additions & 0 deletions digits_spelling.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
One — 1
Two — 2
Three — 3
Four — 4
6 changes: 6 additions & 0 deletions employers_data.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Петров 50000
Сидоров 40000
Зверева 15000
Пупкин 12000
Калошина 10000
Шизова 120000
12 changes: 12 additions & 0 deletions firm_data_in
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
firm_1 ООО 10000 2000
firm_2 ООО 20000 5000
firm_3 АОЗТ 10000 5000
firm_4 ООО 10000 5000
firm_5 ОАО 30000 5000
firm_6 ООО 10000 5000
firm_7 ИП 4000 5000
firm_8 ООО 10000 5000
firm_9 ИП 3000 5000
firm_10 ООО 10000 5000
firm_11 АОЗТ 5000 15000
firm_12 ООО 10000 5000
1 change: 1 addition & 0 deletions firm_data_out
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"firm_1": 8000, "firm_2": 15000, "firm_3": 5000, "firm_4": 5000, "firm_5": 25000, "firm_6": 5000, "firm_8": 5000, "firm_10": 5000, "firm_12": 5000}, {"average profit": 8666.67}]
1 change: 1 addition & 0 deletions generated
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6 12 7 20 2 14 6 20 12 19
4 changes: 4 additions & 0 deletions learn_plan
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Информатика: 100(л) 50(пр) 20(лаб)
Физика: 30(л) — 10(лаб)
Физкультура: — 30(пр) —
Python практика: - 120(пр) 20(лаб)
23 changes: 23 additions & 0 deletions less_5_task1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'''
Создать программно файл в текстовом формате, записать в него построчно данные, вводимые пользователем. Об окончании ввода данных свидетельствует пустая строка.'''

text = []

def usr_input():
while True:
string = input('>')
if string == '':
break
text.append(f'{string}\n')

usr_input()
print(text)

f = open("my_file", 'w')
f.writelines(text)
f.close()


with open("my_file", 'r') as f_obj:
for line in f_obj:
print(line)
12 changes: 12 additions & 0 deletions less_5_task2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'''
2. Создать текстовый файл (не программно), сохранить в нем несколько строк, выполнить подсчет количества строк, количества слов в каждой строке.'''

with open("task2_file", 'r') as f_obj:
input_list = []
line_num = 0
for line in f_obj:
line_num += 1
print(f' in line {line_num}: {len(line.split())} words')
input_list.append(line.replace('\n', ''))
f_obj.close()
print(f'{len(input_list)} lines in file\n')
19 changes: 19 additions & 0 deletions less_5_task3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'''
Создать текстовый файл (не программно), построчно записать фамилии сотрудников и величину их окладов. Определить, кто из сотрудников имеет оклад менее 20 тыс., вывести фамилии этих сотрудников. Выполнить подсчет средней величины дохода сотрудников.
'''
import os

file_name = 'employers_data.txt'
file_path = os.path.join(os.path.dirname(__file__), file_name)

with open(file_path, 'r',encoding='UTF=8') as file:
file_data = file.read().split()

work_dict = {item : int(file_data[index + 1]) for index, item in enumerate(file_data) if index % 2 == 0}

# Фамилии сотрудников с окладом менее 20000
print([key for key, value in work_dict.items() if any(value < 20000 for element in work_dict.values())])

# Средняя ЗП
value_list = [value for key, value in work_dict.items()]
print(sum(value_list) // len(value_list))
36 changes: 36 additions & 0 deletions less_5_task4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
'''4. Создать (не программно) текстовый файл со следующим содержимым:
One — 1
Two — 2
Three — 3
Four — 4
Необходимо написать программу, открывающую файл на чтение и считывающую построчно данные. При этом английские числительные должны заменяться на русские. Новый блок строк должен записываться в новый текстовый файл.'''

import os

file_full_path = os.path.join(os.path.dirname(__file__), 'digits_spelling.txt')
mfile_full_path = os.path.join(os.path.dirname(__file__), 'modyfied_spelling.txt')

replace_cheme = {
'One' : 'Один',
'Two' : 'Два',
'Three' : 'Три',
'Four' : 'Четыре'
}

write_line = ''
with open(mfile_full_path, 'w', encoding='UTF-8') as file_out:
print('Clear out File')
file_out.close()

with open(file_full_path, 'r', encoding='UTF-8') as file_in:
for line in file_in:
in_line = line.replace('\n', '').split(' — ')
for element in in_line:
try:
if element != any(replace_cheme.keys()):
write_line += replace_cheme[element] + ' — '
except KeyError:
write_line += element + '\n'
with open(mfile_full_path, 'a', encoding='UTF-8') as file_out:
file_out.writelines(write_line)
write_line = ''
20 changes: 20 additions & 0 deletions less_5_task5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'''5. Создать (программно) текстовый файл, записать в него программно набор чисел, разделенных пробелами. Программа должна подсчитывать сумму чисел в файле и выводить ее на экран.
'''

from random import randint
from os import path

file_path = path.join(path.dirname(__file__), 'generated')

number_list = [randint(1, 20) for i in range(randint(5,10))]
nums_string = ' '.join(str(el) for el in number_list)

with open(file_path, 'w', encoding='UTF-8') as file:
file.writelines(nums_string)

summ = 0
with open(file_path, 'r') as file:
for line in file:
for x in line.split(' '):
summ += int(x)
print(summ)
30 changes: 30 additions & 0 deletions less_5_task6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
'''6. Необходимо создать (не программно) текстовый файл, где каждая строка описывает учебный предмет и наличие лекционных, практических и лабораторных занятий по этому предмету и их количество. Важно, чтобы для каждого предмета не обязательно были все типы занятий. Сформировать словарь, содержащий название предмета и общее количество занятий по нему. Вывести словарь на экран.
Примеры строк файла:

Информатика: 100(л) 50(пр) 20(лаб).
Физика: 30(л) — 10(лаб)
Физкультура: — 30(пр) —
Пример словаря:

{“Информатика”: 170, “Физика”: 40, “Физкультура”: 30}'''

from random import randint
from os import path

file_content = {}
with open(path.join(path.dirname(__file__), 'learn_plan'), 'r', encoding='UTF-8') as file:
for line in file:
line_content = line.split(':')
file_content[line_content[0]] = line_content[1].split()

output_dict = {}
for key,value in file_content.items():
output_dict[key] = 0
for item in value:
try:
output_dict[key] += int(item.split('(')[0])
except ValueError:
continue

print(output_dict)

40 changes: 40 additions & 0 deletions less_5_task7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'''7. Создать (не программно) текстовый файл, в котором каждая строка должна содержать данные о фирме: название, форма собственности, выручка, издержки.
Пример строки файла: 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 os

'''

import os
import json

file_data_in = os.path.join(os.path.dirname(__file__), 'firm_data_in')
file_data_out = os.path.join(os.path.dirname(__file__), 'firm_data_out')
firm_data_all = {}
firm_data_positive = {}
sum_profit = 0

with open(file_data_in, 'r', encoding='UTF-8') as file_in:
for line in file_in:
line_parse = line.replace('\n','').split()
profit = int(line_parse[2]) - int(line_parse[3])
firm_data_all[line_parse[0]] = profit
if profit > 0:
firm_data_positive[line_parse[0]] = profit
sum_profit += profit

a_profit ={
'average profit': round(sum_profit / len(firm_data_positive), 2)
}
#print(f" average profit: {a_profit.get('average profit')}")
with open(file_data_out, 'w', encoding='utf-8') as file_out:
out_data = [firm_data_positive, a_profit]
json.dump(out_data, file_out)
Empty file added lesson_5.txt
Empty file.
4 changes: 4 additions & 0 deletions modyfied_spelling.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Один — 1
Два — 2
Три — 3
Четыре — 4
5 changes: 5 additions & 0 deletions my_file
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
lkjdslkj
sdfkl;
sdfk
dsf
sdf
7 changes: 7 additions & 0 deletions task2_file
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ghghjgghj

jhkjkjh ghjkjhkjh

lkjlkjlklkj lkjlkjlkj lkjlkjj

kljlkjlkjlk