Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25

Открытие и чтение файла, запись в файл

12.12.2022, 16:28. Показов 5232. Ответов 8

Студворк — интернет-сервис помощи студентам
Вот дополнительно ссылка -https://github.com/netology-co... er/7.filesДомашнее задание к лекции «Открытие и чтение файла, запись в файл»
Необходимо написать программу для кулинарной книги.

Список рецептов должен храниться в отдельном файле в следующем формате:

Название блюда
Количество ингредиентов в блюде
Название ингредиента | Количество | Единица измерения
Название ингредиента | Количество | Единица измерения
...
Пример(файл в папке files):

Омлет
3
Яйцо | 2 | шт
Молоко | 100 | мл
Помидор | 2 | шт

Утка по-пекински
4
Утка | 1 | шт
Вода | 2 | л
Мед | 3 | ст.л
Соевый соус | 60 | мл

Запеченный картофель
3
Картофель | 1 | кг
Чеснок | 3 | зубч
Сыр гауда | 100 | г

Фахитос
5
Говядина | 500 | г
Перец сладкий | 1 | шт
Лаваш | 2 | шт
Винный уксус | 1 | ст.л
Помидор | 2 | шт
В одном файле может быть произвольное количество блюд.
Читать список рецептов из этого файла.
Соблюдайте кодстайл, разбивайте новую логику на функции и не используйте глобальных переменных.
Задача №1
Должен получится следующий словарь

cook_book = {
'Омлет': [
{'ingredient_name': 'Яйцо', 'quantity': 2, 'measure': 'шт.'},
{'ingredient_name': 'Молоко', 'quantity': 100, 'measure': 'мл'},
{'ingredient_name': 'Помидор', 'quantity': 2, 'measure': 'шт'}
],
'Утка по-пекински': [
{'ingredient_name': 'Утка', 'quantity': 1, 'measure': 'шт'},
{'ingredient_name': 'Вода', 'quantity': 2, 'measure': 'л'},
{'ingredient_name': 'Мед', 'quantity': 3, 'measure': 'ст.л'},
{'ingredient_name': 'Соевый соус', 'quantity': 60, 'measure': 'мл'}
],
'Запеченный картофель': [
{'ingredient_name': 'Картофель', 'quantity': 1, 'measure': 'кг'},
{'ingredient_name': 'Чеснок', 'quantity': 3, 'measure': 'зубч'},
{'ingredient_name': 'Сыр гауда', 'quantity': 100, 'measure': 'г'},
]
}
Задача №2
Нужно написать функцию, которая на вход принимает список блюд из cook_book и количество персон для кого мы будем готовить

get_shop_list_by_dishes(dishes, person_count)
На выходе мы должны получить словарь с названием ингредиентов и его количества для блюда. Например, для такого вызова

get_shop_list_by_dishes(['Запеченный картофель', 'Омлет'], 2)
Должен быть следующий результат:

{
'Картофель': {'measure': 'кг', 'quantity': 2},
'Молоко': {'measure': 'мл', 'quantity': 200},
'Помидор': {'measure': 'шт', 'quantity': 4},
'Сыр гауда': {'measure': 'г', 'quantity': 200},
'Яйцо': {'measure': 'шт', 'quantity': 4},
'Чеснок': {'measure': 'зубч', 'quantity': 6}
}
Обратите внимание, что ингредиенты могут повторяться

Задача №3
В папке лежит некоторое количество файлов. Считайте, что их количество и имена вам заранее известны, пример для выполнения домашней работы можно взять тут

Необходимо объединить их в один по следующим правилам:

Содержимое исходных файлов в результирующем файле должно быть отсортировано по количеству строк в них (то есть первым нужно записать файл с наименьшим количеством строк, а последним - с наибольшим)
Содержимое файла должно предваряться служебной информацией на 2-х строках: имя файла и количество строк в нем
Пример Даны файлы: 1.txt

Строка номер 1 файла номер 1
Строка номер 2 файла номер 1
2.txt

Строка номер 1 файла номер 2
Итоговый файл:

2.txt
1
Строка номер 1 файла номер 2
1.txt
2
Строка номер 1 файла номер 1
Строка номер 2 файла номер 1

Добавлено через 1 минуту
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import os
import time
from pprint import pprint
import json
 
cook_data={
  'Омлет': [
    {'ingredient_name': 'Яйцо', 'quantity': 2, 'measure': 'шт.'},
    {'ingredient_name': 'Молоко', 'quantity': 100, 'measure': 'мл'},
    {'ingredient_name': 'Помидор', 'quantity': 2, 'measure': 'шт'}
    ],
  'Утка по-пекински': [
    {'ingredient_name': 'Утка', 'quantity': 1, 'measure': 'шт'},
    {'ingredient_name': 'Вода', 'quantity': 2, 'measure': 'л'},
    {'ingredient_name': 'Мед', 'quantity': 3, 'measure': 'ст.л'},
    {'ingredient_name': 'Соевый соус', 'quantity': 60, 'measure': 'мл'}
    ],
  'Запеченный картофель': [
    {'ingredient_name': 'Картофель', 'quantity': 1, 'measure': 'кг'},
    {'ingredient_name': 'Чеснок', 'quantity': 3, 'measure': 'зубч'},
    {'ingredient_name': 'Сыр гауда', 'quantity': 100, 'measure': 'г'},
    ]
  }
 
#with open("book_cook.txt", 'w') as f: 
   # val={}
    #for key, value in cook_data.items():
     #   f.write(key)
      #  f.write('\n%s\n'%str(len(value)))
       # for val in value:
        #    for key, value in val.items():
         #       f.write('%s|'%str(value))
          #  f.write('\n')
       # f.write('\n')
file_path = "book_cook.txt"
def make_cook_book("book_cook.txt"):
    Kok = {}
    with open("book_cook.txt", encoding='UTF-8') as file:
        for 
def r_bk():
    f_path=os.path.join(os.getcwd(), "book_cook.txt")
    c_b={}
    with open(f_path, 'r', encoding='utf-8') as f:
        for line in f:
            dish_name=line.strip()
            count=int(f.readline())
            ing_list=list()
            for item in range(count):
                ingrs={}
                ingr=f.readline().strip()
                for key, value in ingrs.items():
                    ingrs['ingredient_name'], ingrs['quantity'], ingrs['measure'] = ingr.split('|')
                    ing_list.appened(ingrs.item())
                f.readline()
                c_b[dish_name]=ing_list
    return c_b
   
 
def get_shop_list_by_dishes(dishes, person_count):
    ingr_list = dict()
    for dish_name in dishes:  
        if dish_name in c_b:
            for ings in c_b[dish_name]:  
                meas_quan_list = dict()
                if ings['ingredient_name'] not in ingr_list:
                    meas_quan_list['measure'] = ings['measure']
                    meas_quan_list['quantity'] = ings['quantity'] * person_count
                    ingr_list[ings['ingredient_name']] = meas_quan_list
                else:
                    ingr_list[ings['ingredient_name']]['quantity'] = ingr_list[ings['ingredient_name']]['quantity'] + \
                                                                     ings['quantity'] * person_count
 
        else:
            print(f'\n"Такого блюда нет в списке!"\n')
    return ingr_list
    
def rewrite_file(path1=None, path2=None, path3=None):
    if path1 or path2 or path3 is None:
        path1 = '1.txt'
        path2 = '2.txt'
        path3 = '3.txt'
        os.chdir('sorted')
        outout_file = "rewrite_file.txt"
        file1_path = os.path.join(os.getcwd(), path1)
        file2_path = os.path.join(os.getcwd(), path2)
        file3_path = os.path.join(os.getcwd(), path3)
        with open(file1_path, 'r', encoding='utf-8') as f1:
            file1 = f1.readlines()
        with open(file2_path, 'r', encoding='utf-8') as f2:
            file2 = f2.readlines()
        with open(file3_path, 'r', encoding='utf-8') as f3:
            file3 = f3.readlines()
        with open(outout_file, 'w', encoding='utf-8') as f_total:
 
            if len(file1) < len(file2) and len(file1) < len(file3):
                f_total.write(path1 + '\n')
                f_total.write(str(len(file1)) + '\n')
                f_total.writelines(file1)
                f_total.write('\n')
            elif len(file2) < len(file1) and len(file2) < len(file3):
                f_total.write(path2 + '\n')
                f_total.write(str(len(file2)) + '\n')
                f_total.writelines(file2)
                f_total.write('\n')
            elif len(file3) < len(file1) and len(file3) < len(file2):
                f_total.write(path3 + '\n')
                f_total.write(str(len(file3)) + '\n')
                f_total.writelines(file3)
                f_total.write('\n')
            if len(file2) > len(file1) > len(file3) or len(file2) < len(file1) < len(
                    file3):
                f_total.write(path1 + '\n')
                f_total.write(str(len(file1)) + '\n')
                f_total.writelines(file1)
                f_total.write('\n')
            elif len(file1) > len(file2) > len(file3) or len(file2) > len(file1) and len(file2) < len(
                    file3):
                f_total.write(path2 + '\n')
                f_total.write(str(len(file2)) + '\n')
                f_total.writelines(file2)
                f_total.write('\n')
            elif len(file1) > len(file3) > len(file2) or len(file3) > len(file1) and len(file3) < len(
                    file2):
                f_total.write(path3 + '\n')
                f_total.write(str(len(file3)) + '\n')
                f_total.writelines(file3)
                f_total.write('\n')
            if len(file1) > len(file2) and len(file1) > len(file3):
                f_total.write(path1 + '\n')
                f_total.write(str(len(file1)) + '\n')
                f_total.writelines(file1)
            elif len(file2) > len(file1) and len(file2) > len(file3):
                f_total.write(path2 + '\n')
                f_total.write(str(len(file2)) + '\n')
                f_total.writelines(file2)
            elif len(file3) > len(file1) and len(file3) > len(file2):
                f_total.write(path3 + '\n')
                f_total.write(str(len(file3)) + '\n')
                f_total.writelines(file3)
    else:
        print('Давай лучше без параметров')
    return
 
if __name__ == '__main__':
    filename = "book_cook.txt"
    c_b = r_bk()
    print('Задание 1------------------------------------------------------------')
    time.sleep(1)
    print(c_b)
    print('Задание 2------------------------------------------------------------')
    pprint(get_shop_list_by_dishes(dishes=['Запеченный картофель', 'Омлет'], person_count=2))
    time.sleep(2)
    print('Задание 3------------------------------------------------------------')
    rewrite_file()
Добавлено через 1 час 33 минуты
Помогите решить,сдача 14 числа,сегодня у меня день рождения неуспею в срок.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2022, 16:28
Ответы с готовыми решениями:

Открытие и чтение файла, запись в файл
Необходимо написать программу для кулинарной книги. Список рецептов должен храниться в отдельном файле в следующем формате: ...

Открытие и чтение файла, запись в файл, помещение результата в файл
Eсть алгоритм решения задачи. Не знаю только каким способом открыть файлы и как в них что-либо записывать (для файлов f1 и f2) и помещать...

Создание/открытие файлов, чтение из файла и запись в файл через наследование
Имеется следующая иерархия классов: Файл, Типизированный файл, Текстовый файл Методы: Создать/Открыть файл, Чение из файла, Запись в...

8
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
13.12.2022, 07:38
Chicony91, прости у меня попугай сегодня яйцо высиживает, не успею сделать в срок.
2
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
13.12.2022, 09:18  [ТС]
Fudthhh, что ж ты такой злой!!!
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
14.12.2022, 07:36
Цитата Сообщение от Chicony91 Посмотреть сообщение
Помогите решить,сдача 14 числа,сегодня у меня день рождения неуспею в срок.
Цитата Сообщение от Fudthhh Посмотреть сообщение
Chicony91, прости у меня попугай сегодня яйцо высиживает, не успею сделать в срок
Цитата Сообщение от Chicony91 Посмотреть сообщение
Fudthhh, что ж ты такой злой!!!
Chicony91, твое сообщение трактуется как:
Так-то я бы успел, но у меня ДР, потому я буду бухать, а вы пока сделайте это вместо меня за спасибо.

И просто так копаться в этих простынях - такое себе занятие, а ты такую супермотивацию даешь)
Ничего личного.
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
14.12.2022, 15:28  [ТС]
Red white socks, Прям как бабки старые погудеть,пошептать,обсудить.А просто помочь бескорыстно забыли что это такое...Ладно все с вами ясно. Ничего личного !!!
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
21.12.2022, 20:24
Цитата Сообщение от Chicony91 Посмотреть сообщение
Задача №1
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cook_book = {}
with open('input.txt', encoding='utf-8') as src_file:
    last_key = ''
    for line in src_file:
        line = line.strip()
        if line.isdigit():
            continue
        elif line and '|' not in line:
            cook_book[line] = []
            last_key = line
        elif line and '|' in line:
            name, qt, msure = line.split(" | ")
            cook_book.get(last_key).append(dict(ingredient_name=name, quantity=int(qt), measure=msure))
 
print(cook_book)
1
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
21.12.2022, 20:45  [ТС]
Aviz__, Большое спасибо.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
22.12.2022, 10:34
Aviz__, можно проще:
Python
1
2
3
4
5
cook_book = {
    dish: {"name": name, "quantity": quantity, "measure": measure}
    for dish, _, *indigrients in map(str.splitlines, open("input.txt").read().split("\n\n"))
    for name, quantity, measure in map(lambda x: x.rsplit(" | ", 2), indigrients)
}
1
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
22.12.2022, 16:29
Цитата Сообщение от Fudthhh Посмотреть сообщение
проще:
лаконичнее и красивее да. читабельнее, нет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2022, 16:29
Помогаю со студенческими работами здесь

Открытие, чтение и запись в файл, но работать в браузере:)
Обалдели когда название прочитали?:) Сам в шоке:) В общем, ребята, помогите?:) Задача: Открыть файл Взять информацию ...

Разработать библиотеку функций для работы с файлами (чтение, запись, создание нового файла, открытие файла FILE
разработать библиотеку функций для работы с файлами (чтение, запись, создание нового файла, открытыми файлами c помощью структуры типа...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран 2.Ввод с клавиатуры и запись в массив,...

Запись в файл, чтение из файла, сохранени в файл, не работают эти функции
Здравствуйте. Не работает методы: Save() — сохранение фигуры (объекта) в файл, Load() — считывание фигуры (объекта) из файла. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru