From b3c79a545d1c9c1e4886186f5fde2bac6b83bdc1 Mon Sep 17 00:00:00 2001 From: BerezhkovDA Date: Fri, 21 Nov 2025 10:34:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BC=D0=B0=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA6/OPLATA.DBF | 0 TEMA6/Stroka.txt | 1 + TEMA6/Zadanie.bin | Bin 0 -> 705 bytes TEMA6/report.md | 358 ++++++++++++++++++++++++++++++++++++++++++++++ TEMA6/task.md | 65 +++++++++ TEMA6/zapis1.txt | 0 TEMA6/zapis2.bin | 0 TEMA6/zapis3.txt | 3 + TEMA6/zapis4.txt | 1 + TEMA6/zapis5.txt | 3 + TEMA6/zapis6.mnz | Bin 0 -> 46 bytes TEMA6/zapis7.2ob | Bin 0 -> 139 bytes 12 files changed, 431 insertions(+) create mode 100644 TEMA6/OPLATA.DBF create mode 100644 TEMA6/Stroka.txt create mode 100644 TEMA6/Zadanie.bin create mode 100644 TEMA6/report.md create mode 100644 TEMA6/task.md create mode 100644 TEMA6/zapis1.txt create mode 100644 TEMA6/zapis2.bin create mode 100644 TEMA6/zapis3.txt create mode 100644 TEMA6/zapis4.txt create mode 100644 TEMA6/zapis5.txt create mode 100644 TEMA6/zapis6.mnz create mode 100644 TEMA6/zapis7.2ob diff --git a/TEMA6/OPLATA.DBF b/TEMA6/OPLATA.DBF new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/Stroka.txt b/TEMA6/Stroka.txt new file mode 100644 index 0000000..48d3f7e --- /dev/null +++ b/TEMA6/Stroka.txt @@ -0,0 +1 @@ + diff --git a/TEMA6/Zadanie.bin b/TEMA6/Zadanie.bin new file mode 100644 index 0000000000000000000000000000000000000000..66b6b729af53a0065555702663ac3e198dfbfb28 GIT binary patch literal 705 zcmX|0?A5QO1`1j&<7A^b;@CPj)+q)nTGNGIKiOAY}^k%|X!Y2Fvl=g3#A*6Z2X z**RZk*RN*6w~UQhr`Xs{4o1N}Do}Gd^IjKE%B(JOZ7PH}Iapl=VN1}_3mb&Bf;fmF zsZ1hiLdXFYr_2a!9&&K7XhvbF6IHT8c$G+UiG&`>pK4rC@B#!)@-$XLCxK1^*$5mE zBe0_l_yvBRH}&vvoAeG?rGnwA=qbkWT&!M%p|T z=h0t%C@Ug_--n|NL|3_}T7&cltd<{iz)pu@JAo|{g|otW48Rlx-UJ5lSPB?s)}xI~ zp**EcI;YiTc6~0-Zt{_qaq-#@{oyeFrZ|7!eU3x_o#Nd~du;!@y{h-yaTrhC4#?u| M*q^%d&yd>H4IV?=fB*mh literal 0 HcmV?d00001 diff --git a/TEMA6/report.md b/TEMA6/report.md new file mode 100644 index 0000000..e79d818 --- /dev/null +++ b/TEMA6/report.md @@ -0,0 +1,358 @@ +# Отчет по теме 6 +Бережков Дмитрий, А-01-23 +## 1.Начало работы, настройка текущего каталога +```py +>>> import os +>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6') +``` +## 2. Вывод данных на экран дисплея +2.1 Вывод в командной строке +```py +>>> stroka='Автоматизированная система управления' +>>> stroka +'Автоматизированная система управления' +``` +Этот способ называется «эхо-выводом». Он пригоден при работе в командной строке, однако в пользовательских функциях этот способ применять нельзя. +2.2 Вывод с использованием функции print +Этот способ можно применять и в командной строке, и в функциях. +```py +>>> fff=234.5;gg='Значение температуры = ' +>>> print(gg,fff) #Можно вывести несколько объектов за одно обращение к функции +Значение температуры = 234.5 +>>> print(gg, fff, sep='/') +Значение температуры = /234.5 +``` + Если курсор надо оставить в той же строке, то следует использовать еще один аргумент: +```py +>>> print(gg, fff,sep='/',end='***'); print('____') +Значение температуры = /234.5***____ +``` +Если в какой-то момент требуется просто перейти на новую строку, можно использовать следующее обращение к функции: +```py +>>> print() +``` +```py +>>> print(""" Здесь может выводиться +... большой текст, +... занимающий несколько строк""") +... + Здесь может выводиться +большой текст, +занимающий несколько строк +>>> print("Здесь может выводиться", +... "большой текст,", +... "занимающий несколько строк") +... +Здесь может выводиться большой текст, занимающий несколько строк +``` +Разница в двух случаях состоит в том, что в первом случае тройные кавычки воспроизводят текст ровно так, как он был введен. Во втором случае три выводимых объекта-строки перечислены через запятую и выведены как три объекта, разделённые пробелом. + + +2.3 Вывод с использованием метода write объекта sys.stdout +```py +>>> import sys +>>> sys.stdout.write('Функция write') +Функция write13 +>>> sys.stdout.write('Функция write\n') +Функция write +14 +``` +## 3.Ввод данных с клавиатуры +```py +>>> psw=input('Введите пароль:') +Введите пароль:12345 +>>> psw +'12345' +>>> type(psw) + +``` +input() всегда возвращает строку. +Пример 1: Ввод с контролем значения. +```py +>>> while True: +... znach=float(input('Задайте коэф.усиления = ')) +... if znach<17.5 or znach>23.8: +... print('Ошибка!') +... else: +... break +... +Задайте коэф.усиления = 15.4 +Ошибка! +Задайте коэф.усиления = 21.6 +>>> znach +21.6 +``` +Пример 2: Ввод и обработка выражения, подлежащего расчету. +```py +>>> import math +>>> print(eval(input('введите выражение для расчета = '))) +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 +``` +## 4. Ввод-вывод при работе с файлами +4.1 Функции для работы с путём к файлу +```py +>>> import os +>>> os.getcwd() +'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6' +>>> Berezhkov=os.getcwd() +>>> print(Berezhkov) +C:\MPEI\PO_ASY\BerezhkovGit\python-labs\Tema6 +os +>>> os.mkdir("newp") #создание директории newp в текущей папке +>>> os.rmdir("newp") #Удаление newp +>>> os.listdir() # функция показа всех файлов и папок +['.gitkeep', 'report.md'] +>>> os.path.isdir("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6") +... +True +``` +>>> fil=os.path.abspath("oplata.dbf") #получение имя файла вместе с полным путем доступа к нему +... +>>> drkt=os.path.dirname(fil)3 Выделение пути доступа к файлу из строки, содержащей и этот путь, и имя файла +... +>>> drkt +... +'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6' +>>> drkt1=os.path.basename(drkt=os.path.dirname(fil)) +... +>>> drkt1=os.path.basename(os.path.abspath("oplata.dbf")) +... +>>> drkt1 +... +'oplata.dbf' +>>> os.path.split(os.path.abspath("oplata.dbf"))# Функция разделения на кортеж из пути и из имени файла +... +('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6', 'oplata.dbf') +>>> type(os.path.split(os.path.abspath("oplata.dbf"))) +... + +>>> os.path.exists("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6") +... +True +>>> os.path.isfile("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\OPLATA.DBF")# Функция проверки существования каталога +... +True +>>> os.path.isfile("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6") +... +False +``` +4.2 Общая схема работы с файлом + +Для обмена данными с файлом необходимо выполнить следующие операции: Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); Выполнение одной или нескольких операций обмена данными с файлом; Закрытие файла. + +4.3 Открытие файла для записи или чтения данных - функция open. +```py +>>> fp=open(file=drkt+'\\zapis1.txt',mode='w') +... +>>> fp +... +<_io.TextIOWrapper name='C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\zapis1.txt' mode='w' encoding='cp1251'> +>>> fp=open(drkt+'\\zapis1.txt','w') +... +>>> fp=open('zapis1.txt','w')#Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла +... +>>> fp +... +<_io.TextIOWrapper name='zapis1.txt' mode='w' encoding='cp1251'> +>>> type(fp) +... + +dir(fp) + +['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines'] +>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+') +>>> fp1 +<_io.BufferedRandom name='C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\zapis2.bin'> +``` +4.4 Закрытие файла +```py +>>> fp.close() +``` +4.5 Запись информации в файл с помощью метода write. +```py +>>> sps=list(range(1,13)) +... +>>> fp2=open('zapis3.txt','w') +... +>>> fp2.write(str(sps[:4])+'\n') +... +13 +>>> fp2.write(str(sps[4:8])+'\n') +... +13 +>>> fp2.write(str(sps[8:])+'\n') +... +16 +>>> fp2.close() +... +``` +Откроем файл zapis3.txt и посмотрим его содержимое: [1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] В файл записались преобразованные в строки срезы списка. + +```py +>>> sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +... +>>> fp3=open('zapis4.txt','w') +... +>>> for i in range(len(sps3)): +... stroka4=sps3[i][0]+' '+str(sps3[i][1]) +... fp3.write(stroka4) +... +... +11 +11 +12 +fp3.close() +``` +Содержание файла zapis4.txt: Иванов И. 1Петров П. 2Сидоров С. 3 + +Видно, что строки склеились там. можно сделать по-другому: +```py +>>> gh=open('zapis5.txt','w') +... +>>> for r in sps3: +... gh.write(r[0]+' '+str(r[1])+'\n') +... +... +12 +12 +13 +>>> gh.close() +... +``` +4.6 Первый способ чтения информации из текстового файла. +```py +>>> sps1=[] +... +>>> fp=open('zapis3.txt') # Файл открыт в режиме чтения (по умолчанию) +... +>>> for stroka in fp: +... stroka=stroka.rstrip('\n') +... stroka=stroka.replace('[','') +... stroka=stroka.replace(']','') +... sps1=sps1+stroka.split(',') +... +... +>>> fp.close() +... +>>> sps1 +... +['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] +>>> sps +... +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` +Видно, что полученный список отличается от исходного sps типом данных, а также не убраны некоторые пробелы. Исправим это: +```py +>>> sps2 = [int(i.strip()) for i in sps1] +... +>>> sps2 +... +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` +4.7 Чтение информации из файла с помощью метода read +```py +>>> fp=open('zapis3.txt') +... +>>> stroka1=fp.read(12) # Чтение первых 12 файлов, курсор остановится на 13-ом (/n) +... +>>> stroka2=fp.read() # Чтение всех оставшихся файлов +... +>>> fp.close() +... +>>> stroka1 +... +'[1, 2, 3, 4]' +>>> stroka2 +... +'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n' +``` +4.8 Чтение информации с помощью методов readline и readlines +```py +>>> file = open("zapis5.txt") +... +>>> file.readline() +... +'Иванов И. 1\n' +>>> file.close() +... +>>> file = open("zapis5.txt") +... +>>> file.readlines() +... +['Иванов И. 1\n', 'Петров П. 2\n', 'Сидоров С. 3\n'] +>>> file.close() +``` +4.9 Ввод-вывод объектов с использованием функций из модуля pickle +```py +import pickle +>>> mnoz1={'pen','book','pen','iPhone','table','book'} +>>> fp=open('zapis6.mnz','wb') # Бинарный файл – на запись +>>> pickle.dump(mnoz1,fp) # dump – метод записи объекта в файл +>>> fp.close() +``` +Содержание файла zapis6.mnz: 耄锣 鐨谆楐桯湥钌Ͱ敮钌Ѣ潯殔谅瑡扬斔逮 + +Так происходит, потому что байты в этом файле не предназначены для текстового представления. Они могут содержать символы, которые не могут быть корректно интерпретированы в рамках текстовой кодировки. +```py +>>> fp=open('zapis6.mnz','rb') +>>> mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +>>> fp.close() +>>> mnoz2 +{'table', 'pen', 'iPhone', 'book'} +>>> mnoz1 +{'table', 'pen', 'iPhone', 'book'} +>>> mnoz1==mnoz2 +True +``` +mnoz1 не совпадает с изначально заданным mnoz1, потому что данный тип объекта исключает повторяющиеся элементы. +```py +>>> fp=open('zapis7.2ob','wb') +>>> pickle.dump(mnoz1,fp) +>>> pickle.dump(sps3,fp) +>>> fp.close() +>>> fp=open('zapis7.2ob','rb') +>>> obj1=pickle.load(fp) #Первое обращение к load читает первый объект +>>> obj2=pickle.load(fp) #Второе – читает второй +>>> fp.close() +>>> obj1 +{'table', 'pen', 'iPhone', 'book'} +>>> obj2 +[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] +``` +Теперь с использованием тех же функций запишем в файл, а затем прочитаем два объекта разных типов. При считывании объекты извлекаются из файла в той же последовательности, в которой они в него записывались + +## 5. Перенаправление потоков ввода и вывода данных +```py +>>> import sys # Модуль для работы с потоками +>>> vr_out=sys.stdout #Запоминаем текущий поток вывода +>>> fc=open('Stroka.txt','w') #Откроем файл вывода +>>> sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл +>>> print('запись строки в файл') #Вывод теперь будет не на экран, а в файл +>>> sys.stdout=vr_out #Восстановление текущего потока +>>> print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился +запись строки на экран +>>> fc.close() +``` +В результате создан файл Stroka.txt в текущем каталоге с содержанием: 'запись строки в файл' + +Можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла: +```py +>>> tmp_in = sys.stdin #Запоминаем текущий поток ввода +>>> fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения) +>>> sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры +>>> sys.stdin +<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'> +>>> while True: +... try: +... line = input () #Считываем из файла строку +... print(line) # Отображаем считанное +... except EOFError: # Если возникла конкретная ошибка EOFError +... break +... +... +запись строки в файл +fd.close() +sys.stdin=tmp_in # Возвращение стандартного назначения для потока ввода +``` + diff --git a/TEMA6/task.md b/TEMA6/task.md new file mode 100644 index 0000000..576bc50 --- /dev/null +++ b/TEMA6/task.md @@ -0,0 +1,65 @@ +# Общее контрольное задание по теме 6 +Бережков Дмитрий А-01-23 +## Задание: +Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции: +1 Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк. +2 Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников. +3 Записывается кортеж в бинарный файл. +4 Записывается в этот же файл список и закрывается файл. +5 Открывается этот файл для чтения и считывает из него данные в 2 новых объекта. +6 Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение. +7 Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами. +## Решение: +1. +```py +>>> import random +>>> tpl= tuple(str(random.randint(6, 56)) for x in range(125)) +>>> tpl +('10', '26', '16', '38', '30', '23', '44', '19', '42', '33', '8', '41', '24', '50', '50', '54', '49', '52', '21', '36', '14', '14', '19', '33', '55', '41', '35', '11', '17', '34', '48', '52', '23', '8', '48', '27', '43', '7', '48', '7', '34', '16', '6', '56', '47', '53', '48', '28', '52', '39', '32', '42', '47', '48', '13', '37', '51', '30', '56', '16', '50', '24', '40', '45', '55', '30', '34', '6', '48', '36', '23', '52', '47', '43', '55', '42', '43', '12', '13', '6', '36', '43', '38', '39', '26', '21', '20', '8', '39', '27', '43', '53', '55', '16', '41', '47', '30', '55', '15', '55', '54', '51', '18', '16', '21', '47', '14', '45', '22', '41', '28', '46', '51', '31', '44', '45', '38', '22', '44', '55', '41', '25', '45', '30', '26') +``` +2. +```py +>>> spis=["Filippov", "Tabolin", "Berezhkov", "Goloshapov", "Krishtul"] +>>> spis +['Filippov', 'Tabolin', 'Berezhkov', 'Goloshapov', 'Krishtul'] +``` +3. +```py +>>> fp = open("Zadanie.bin", "wb") +>>> pickle.dump(tpl, fp) +``` +4. +```py +>>> pickle.dump(spis, fp) +>>> fp.close() +``` +5. +```py +>>> fp = open("Zadanie.bin", "rb") +>>> obj1=pickle.load(fp) +>>> obj2=pickle.load(fp) +>>> obj1 +('10', '26', '16', '38', '30', '23', '44', '19', '42', '33', '8', '41', '24', '50', '50', '54', '49', '52', '21', '36', '14', '14', '19', '33', '55', '41', '35', '11', '17', '34', '48', '52', '23', '8', '48', '27', '43', '7', '48', '7', '34', '16', '6', '56', '47', '53', '48', '28', '52', '39', '32', '42', '47', '48', '13', '37', '51', '30', '56', '16', '50', '24', '40', '45', '55', '30', '34', '6', '48', '36', '23', '52', '47', '43', '55', '42', '43', '12', '13', '6', '36', '43', '38', '39', '26', '21', '20', '8', '39', '27', '43', '53', '55', '16', '41', '47', '30', '55', '15', '55', '54', '51', '18', '16', '21', '47', '14', '45', '22', '41', '28', '46', '51', '31', '44', '45', '38', '22', '44', '55', '41', '25', '45', '30', '26') +>>> obj2 +['Filippov', 'Tabolin', 'Berezhkov', 'Goloshapov', 'Krishtul'] +``` +6. +```py +>>> print("obj1 и tpl совпадают") if obj1 == tpl else print("Переменные не совпадают") +obj1 и tpl совпадают +>>> print("obj2 и spis совпадают") if obj2 == spis else print("Переменные не совпадают") +obj2 и spis совпадают +``` +7. +```py +>>> for i in range(125//5): +... exec('list' + str(i) + '=' + str(list(obj1[i:i+5]))) +... +... +>>> list1 +['26', '16', '38', '30', '23'] +>>> list2 +['16', '38', '30', '23', '44'] +>>> list3 +['38', '30', '23', '44', '19'] +``` \ No newline at end of file diff --git a/TEMA6/zapis1.txt b/TEMA6/zapis1.txt new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/zapis2.bin b/TEMA6/zapis2.bin new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/zapis3.txt b/TEMA6/zapis3.txt new file mode 100644 index 0000000..8132aa8 --- /dev/null +++ b/TEMA6/zapis3.txt @@ -0,0 +1,3 @@ +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] diff --git a/TEMA6/zapis4.txt b/TEMA6/zapis4.txt new file mode 100644 index 0000000..edd0c45 --- /dev/null +++ b/TEMA6/zapis4.txt @@ -0,0 +1 @@ + . 1 . 2 . 3 \ No newline at end of file diff --git a/TEMA6/zapis5.txt b/TEMA6/zapis5.txt new file mode 100644 index 0000000..ecde2d7 --- /dev/null +++ b/TEMA6/zapis5.txt @@ -0,0 +1,3 @@ + . 1 + . 2 + . 3 diff --git a/TEMA6/zapis6.mnz b/TEMA6/zapis6.mnz new file mode 100644 index 0000000000000000000000000000000000000000..6603955ce1e447ceed7570e38fe72781ac104a0a GIT binary patch literal 46 wcmZo*nX1eH0sT`ndRR*mlX6n0^e`8s=1u8g%M8fK&jWHB5E!doS#}uu0*<481AdjHwWb`4_fcY`WM0k(dvZU;;}BU08Tw$Av8y O_Q9kU0;QN!Q}qC2raXuM literal 0 HcmV?d00001