From 91b41fea524d186c8db90df8ba971a8592ff698c Mon Sep 17 00:00:00 2001 From: KhodiukMR Date: Sun, 2 Nov 2025 19:31:41 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D1=87=D1=91=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA6/report.md | 929 ++++++++++++++++++++++++------------------------ 1 file changed, 468 insertions(+), 461 deletions(-) diff --git a/TEMA6/report.md b/TEMA6/report.md index 39b23dc..2782826 100644 --- a/TEMA6/report.md +++ b/TEMA6/report.md @@ -1,461 +1,468 @@ -# Отчёт по Теме 6 -Ходюк Максим Романович А-01-23 -## Пункт 1 -Запустил стреду IDLE и выставил рабочий каталог: -``` -import os -os.chdir('D:\\POAS\\Hodyuk\\Tema6\\') -``` - -## Пункт 2 -### 2.1. Вывод в командной строке -``` -stroka='Автоматизированная система управления' -stroka -'Автоматизированная система управления' -``` -Данный способ вывода называется Эхо-выводом - -### 2.2 Функция print -Пример использования -``` -fff=234.5;gg='Значение температуры = ' -print(gg, fff) -Значение температуры = 234.5 -``` - -Можно изменить разделитель при выводе аргументом sep и символы, оканчивающие вывод с помощью аргумента end -``` -print(gg, fff, sep='/') -Значение температуры = /234.5 -print(gg, fff,sep='/',end='***'); print('____') -Значение температуры = /234.5***____ -print() -``` - -Оператор вывода может располагаться на нескольких строках: -``` -print(""" Здесь может выводиться -большой текст, -занимающий несколько строк""") - - Здесь может выводиться -большой текст, -занимающий несколько строк -print("Здесь может выводиться", - "большой текст,", - "занимающий несколько строк") -Здесь может выводиться большой текст, занимающий несколько строк -``` - -### 2.3 Функция write -Импортирую модуль sys и применяю функцию write -``` -import sys -sys.stdout.write('Функция write') -Функция write13 -sys.stdout.write('Функция write\n') -Функция write -14 -``` - -## Пункт 3. Функция input (ввод с клавиатуры) - -``` -psw=input('Введите пароль:') -Введите пароль: 12345 -psw -' 12345' -``` - -Пример 1. Ввод с контролем значения -``` -while True: - znach=float(input('Задайте коэф.усиления = ')) - if znach<17.5 or znach>23.8: - print('Ошибка!') - else: - break - -Задайте коэф.усиления = 20 -while True: - znach=float(input('Задайте коэф.усиления = ')) - if znach<17.5 or znach>23.8: - print('Ошибка!') - else: - break - - -Задайте коэф.усиления = 3 -Ошибка! -Задайте коэф.усиления = 5 -Ошибка! -Задайте коэф.усиления = 19 -``` - -Пример 2. Ввод и обработка выражения -``` -import math -print(eval(input('введите выражение для расчета = '))) -введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) -1.34504378689765 -``` - -## Пункт 4. -### 4.1 Функции для работы с путём к файлу - -Модуль os был импортирован ранее, а также выставлен рабочий каталог, поэтому сразу перейду к использованию других функций в этом модуле -Использование функции для создания и удаления каталога: -``` -os.mkdir('gg') -``` -На рис.1 представлен скриншот созданного каталога gg -![Рис 1.](photo1.png) - -``` -os.rmdir('gg') -``` - -На рис. 2 представлен скриншот после выполнения функций удаления каталога -![Рис 2.](photo2.png) - -Использовал функцию для выводе всех файлов, находящихся в выбранном каталоге(при пустых аргументах выдаёт содержимое рабочего каталога) -``` -os.listdir() -['photo1.png', 'photo2.png', 'report.md'] -``` - -Использования функции isdir из модуля os.path (для проверки наличия подкаталога в каталоге) -``` -help(os.path.isdir) -Help on built-in function _path_isdir in module nt: - -_path_isdir(s) - Return true if the pathname refers to an existing directory. - -os.mkdir('test_isdir') -os.path.isdir('test_isdir') -True -``` - -Пусть в рабочем каталоге находится файл OPLATA.DBF. С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему: - -``` -fil=os.path.abspath("oplata.dbf") -fil -'D:\\POAS\\Hodyuk\\Tema6\\oplata.dbf' - -fil=os.path.abspath("photo1.png") -fil -'D:\\POAS\\Hodyuk\\Tema6\\photo1.png' -``` - -Выделил путь доступа к файлу из строки с помощью следующей функции: -``` -drkt=os.path.dirname(fil) -drkt -'D:\\POAS\\Hodyuk\\Tema6' -``` -Далее выделил имя файла из этой строки -``` -bn=os.path.basename(fil) -bn -'photo1.png' -``` - -Самостоятельно применил функцию os.path.split -``` -help(os.path.split) -Help on function split in module ntpath: - -split(p) - Split a pathname. - - Return tuple (head, tail) where tail is everything after the final slash. - Either part may be empty. - -os.path.split(fil) -('D:\\POAS\\Hodyuk\\Tema6', 'photo1.png') -``` -Функция возвращает кортёж из пути доступа к файлу и его имени, отделив их друг от друга - -С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции. -``` -os.path.exists(drkt) -True -os.path.exists('D:test\\wrong\\way\\') -False -``` - -Проверил наличие файла с известным расположением(если как аргумент задать только имя файла, функция будет искать файл в рабочем каталоге) -``` -os.path.isfile(fil) -True -os.path.isfile(os.path.dirname(fil)+'fil1.txt') -False -``` - -### 4.2 Общая схема работы с файлом -Для обмена данными с файлом необходимо выполнить следующие операции: - -• Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); - -• Выполнение одной или нескольких операций обмена данными с файлом; - -• Закрытие файла. - -### 4.3 Открытие файла для записи или чтения - функция open -Открыл файл zapis1.txt для записи данных -``` -fp=open(file=drkt+'\\zapis1.txt',mode='w') -``` -Проверил наличие открываемого файла: -``` -os.path.isfile(drkt+'\\zapis1.txt') -True -``` -Вообще говоря, аргументы функции с их именами могут располагаться в любом порядке. Если имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать и просто вводить -``` -fp=open(drkt+'\\zapis1.txt','w') -``` -С помощью функции closed проверил, открыт ли файл(соответственно, если функция возвращает True - файл закрыт, а если False - то открыт). Далее буду использовать этот способ для проверки открытия файла - -``` -fp.closed -False -``` -Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла: -``` -fp=open('zapis1.txt','w') -fp.closed -False -``` -Отобразил тип и список атрибутов объекта fp -``` -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'] -``` - -Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b». -``` -fp1=open(drkt+'\\zapis2.bin',mode='wb+') -fp1.closed -False -``` - -### 4.4 Закрытие файла -``` -fp.close() -fp.closed -True -``` - -### 4.5 Запись в файл с помощью функции write -Рассмотрел пример создания списка и записи его в файл -``` -sps=list(range(1,13)) -sps -[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] -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](zapis3.txt) представлено на рис.3 -![Рис.3](photo3.png) - -Следующий пример - -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](zapis4.txt) представлено на рис.4 -![Рис.4](photo4.png) - -Легко заметить, что информация записана в файл не очень удачно. - -Пробую записать информацию в файл другим способом -``` -gh=open('zapis5.txt','w') -for r in sps3: - gh.write(r[0]+' '+str(r[1])+'\n') - -12 -12 -13 -gh.close() -``` - -Содержимое файла [zapis5.txt](zapis5.txt) представлено на рис.5 -![Рис.5](photo5.png) - -Представил цикл в одной строке: -``` -gh=open('zapis5.txt','w') -for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') - -12 -12 -13 -gh.close() -``` -После выполнения цикла содержимое файла такое же, как было - - -### 4.6 Чтений информации из текстового файла: Способ Первый - -Прочитал информацию из созданного ранее файла zapis3.txt -``` -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'] -``` -Здесь, перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки, а с помощью метода replace – скобки. -Видно, что полученный список отличается от исходного sps, в первую очередь, типом данных -Преобразовать sps1 в sps можно, например, так: -``` -sps2 = [int(i.strip()) for i in sps1] -sps2 -[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] -``` - -### 4.7 Чтение с помощью метода read - -``` -fp=open('zapis3.txt') -stroka1=fp.read(12) -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 -``` -fp=open('zapis3.txt') -stroka3=fp.readline() -stroka3 -'[1, 2, 3, 4]\n' -stroka4=fp.readline() -stroka4 -'[5, 6, 7, 8]\n' -strokaAll=fp.readlines() -strokaAll -['[9, 10, 11, 12]\n'] -fp.close() -fp=open('zapis3.txt') -strokaAll=fp.readlines() -strokaAll -['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] -``` - -### 4.9 Ввод-вывод с помощью модуля pickle -Пример этого способа работы с файлами -``` -import pickle -mnoz1={'pen','book','pen','iPhone','table','book'} -fp=open('zapis6.mnz','wb') -fp.closed -False -pickle.dump(mnoz1,fp) -fp.close() -``` - -Теперь прочитаю из файла zapis6.mnz -``` -fp=open('zapis6.mnz','rb') -mnoz2=pickle.load(fp) -fp.close() -mnoz2 -{'book', 'pen', 'table', 'iPhone'} -mnoz1 == mnoz2 -True -``` -Как можно заметить, визуально файлы отличаются, но проверка на совпадение выдаёт результат True -mnoz2 не совпадает с тем, что было задано, потому что это множество. Оно исключает повторяющиеся элементы, оставляя только один, а еще не содержит конкретный порядок элементов. Но два множества равны, если у них равны все элементы и их одинаковое количество, вне зависимости от порядка, так что сравнение возвращает True. - -А теперь с использованием тех же функций запишите в файл, а затем прочитайте два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3. -``` -fp=open('zapis7.2ob','wb') -pickle.dump(mnoz1,fp) -pickle.dump(sps3,fp) -fp.close() -fp=open('zapis7.2ob','rb') -obj1=pickle.load(fp) -obj2=pickle.load(fp) -fp.close() -obj1,obj2 -({'book', 'pen', 'table', 'iPhone'}, [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]) -obj1 == mnoz1 -True -obj2 == sps3 -True -``` -Убедился в совпадении прочитанных данных с введёнными - - -## Пункт 5. Перенаправление потоков ввода и вывода -Пример 1 -``` -vr_out=sys.stdoutmnoz1 -fc=open('Stroka.txt','w') -sys.stdout=fc -print('запись строки в файл') -sys.stdout=vr_out -print('запись строки на экран') -запись строки на экран -fc.close() -``` -В результате получаю файл [Stroka.txt](Stroka.txt) со следующим содержанием -![Рис.6](photo6.png) - -Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла. - -``` -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: - break - -запись строки в файл -fd.close() -``` - -Вернул стандартное назначение потора ввода -``` -sys.stdin=tmp_in -``` -## Пункт 6 -Закончил сеанс работы с IDLE - +# Отчёт по Теме 6 +Ходюк Максим Романович А-01-23 +## Пункт 1 +Запустил стреду IDLE и выставил рабочий каталог: +``` +import os +os.chdir('D:\\POAS\\Hodyuk\\Tema6\\') +``` + +## Пункт 2 +### 2.1. Вывод в командной строке +``` +stroka='Автоматизированная система управления' +stroka +'Автоматизированная система управления' +``` +Данный способ вывода называется Эхо-выводом + +### 2.2 Функция print +Пример использования +``` +fff=234.5;gg='Значение температуры = ' +print(gg, fff) +Значение температуры = 234.5 +``` + +Можно изменить разделитель при выводе аргументом sep и символы, оканчивающие вывод с помощью аргумента end +``` +print(gg, fff, sep='/') +Значение температуры = /234.5 +print(gg, fff,sep='/',end='***'); print('____') +Значение температуры = /234.5***____ +print() +``` + +Оператор вывода может располагаться на нескольких строках: +``` +print(""" Здесь может выводиться +большой текст, +занимающий несколько строк""") + + Здесь может выводиться +большой текст, +занимающий несколько строк +print("Здесь может выводиться", + "большой текст,", + "занимающий несколько строк") +Здесь может выводиться большой текст, занимающий несколько строк +``` + +### 2.3 Функция write +Импортирую модуль sys и применяю функцию write +``` +import sys +sys.stdout.write('Функция write') +Функция write13 +sys.stdout.write('Функция write\n') +Функция write +14 +``` + +## Пункт 3. Функция input (ввод с клавиатуры) + +``` +psw=input('Введите пароль:') +Введите пароль: 12345 +psw +' 12345' +``` + +Пример 1. Ввод с контролем значения +``` +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break + +Задайте коэф.усиления = 20 +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break + + +Задайте коэф.усиления = 3 +Ошибка! +Задайте коэф.усиления = 5 +Ошибка! +Задайте коэф.усиления = 19 +``` + +Пример 2. Ввод и обработка выражения +``` +import math +print(eval(input('введите выражение для расчета = '))) +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 +``` + +## Пункт 4. +### 4.1 Функции для работы с путём к файлу + +Модуль os был импортирован ранее, а также выставлен рабочий каталог, поэтому сразу перейду к использованию других функций в этом модуле +Использование функции для создания и удаления каталога: +``` +os.mkdir('gg') +``` +На рис.1 представлен скриншот созданного каталога gg +Рис. 1: +![Рис 1.](photo1.png) + +``` +os.rmdir('gg') +``` + +На рис. 2 представлен скриншот после выполнения функций удаления каталога + +Рис. 2: +![Рис 2.](photo2.png) + +Использовал функцию для выводе всех файлов, находящихся в выбранном каталоге(при пустых аргументах выдаёт содержимое рабочего каталога) +``` +os.listdir() +['photo1.png', 'photo2.png', 'report.md'] +``` + +Использования функции isdir из модуля os.path (для проверки наличия подкаталога в каталоге) +``` +help(os.path.isdir) +Help on built-in function _path_isdir in module nt: + +_path_isdir(s) + Return true if the pathname refers to an existing directory. + +os.mkdir('test_isdir') +os.path.isdir('test_isdir') +True +``` + +Пусть в рабочем каталоге находится файл OPLATA.DBF. С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему: + +``` +fil=os.path.abspath("oplata.dbf") +fil +'D:\\POAS\\Hodyuk\\Tema6\\oplata.dbf' + +fil=os.path.abspath("photo1.png") +fil +'D:\\POAS\\Hodyuk\\Tema6\\photo1.png' +``` + +Выделил путь доступа к файлу из строки с помощью следующей функции: +``` +drkt=os.path.dirname(fil) +drkt +'D:\\POAS\\Hodyuk\\Tema6' +``` +Далее выделил имя файла из этой строки +``` +bn=os.path.basename(fil) +bn +'photo1.png' +``` + +Самостоятельно применил функцию os.path.split +``` +help(os.path.split) +Help on function split in module ntpath: + +split(p) + Split a pathname. + + Return tuple (head, tail) where tail is everything after the final slash. + Either part may be empty. + +os.path.split(fil) +('D:\\POAS\\Hodyuk\\Tema6', 'photo1.png') +``` +Функция возвращает кортёж из пути доступа к файлу и его имени, отделив их друг от друга + +С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции. +``` +os.path.exists(drkt) +True +os.path.exists('D:test\\wrong\\way\\') +False +``` + +Проверил наличие файла с известным расположением(если как аргумент задать только имя файла, функция будет искать файл в рабочем каталоге) +``` +os.path.isfile(fil) +True +os.path.isfile(os.path.dirname(fil)+'fil1.txt') +False +``` + +### 4.2 Общая схема работы с файлом +Для обмена данными с файлом необходимо выполнить следующие операции: + +• Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); + +• Выполнение одной или нескольких операций обмена данными с файлом; + +• Закрытие файла. + +### 4.3 Открытие файла для записи или чтения - функция open +Открыл файл zapis1.txt для записи данных +``` +fp=open(file=drkt+'\\zapis1.txt',mode='w') +``` +Проверил наличие открываемого файла: +``` +os.path.isfile(drkt+'\\zapis1.txt') +True +``` +Вообще говоря, аргументы функции с их именами могут располагаться в любом порядке. Если имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать и просто вводить +``` +fp=open(drkt+'\\zapis1.txt','w') +``` +С помощью функции closed проверил, открыт ли файл(соответственно, если функция возвращает True - файл закрыт, а если False - то открыт). Далее буду использовать этот способ для проверки открытия файла + +``` +fp.closed +False +``` +Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла: +``` +fp=open('zapis1.txt','w') +fp.closed +False +``` +Отобразил тип и список атрибутов объекта fp +``` +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'] +``` + +Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b». +``` +fp1=open(drkt+'\\zapis2.bin',mode='wb+') +fp1.closed +False +``` + +### 4.4 Закрытие файла +``` +fp.close() +fp.closed +True +``` + +### 4.5 Запись в файл с помощью функции write +Рассмотрел пример создания списка и записи его в файл +``` +sps=list(range(1,13)) +sps +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +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](zapis3.txt) представлено на рис.3 +Рис. 3: +![Рис.3](photo3.png) + +Следующий пример +``` +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](zapis4.txt) представлено на рис.4 +Рис. 4: +![Рис.4](photo4.png) + +Легко заметить, что информация записана в файл не очень удачно. + +Пробую записать информацию в файл другим способом +``` +gh=open('zapis5.txt','w') +for r in sps3: + gh.write(r[0]+' '+str(r[1])+'\n') + +12 +12 +13 +gh.close() +``` + +Содержимое файла [zapis5.txt](zapis5.txt) представлено на рис.5 +Рис. 5: +![Рис.5](photo5.png) + +Представил цикл в одной строке: +``` +gh=open('zapis5.txt','w') +for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') + +12 +12 +13 +gh.close() +``` +После выполнения цикла содержимое файла такое же, как было + + +### 4.6 Чтений информации из текстового файла: Способ Первый + +Прочитал информацию из созданного ранее файла zapis3.txt +``` +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'] +``` +Здесь, перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки, а с помощью метода replace – скобки. +Видно, что полученный список отличается от исходного sps, в первую очередь, типом данных +Преобразовать sps1 в sps можно, например, так: +``` +sps2 = [int(i.strip()) for i in sps1] +sps2 +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` + +### 4.7 Чтение с помощью метода read + +``` +fp=open('zapis3.txt') +stroka1=fp.read(12) +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 +``` +fp=open('zapis3.txt') +stroka3=fp.readline() +stroka3 +'[1, 2, 3, 4]\n' +stroka4=fp.readline() +stroka4 +'[5, 6, 7, 8]\n' +strokaAll=fp.readlines() +strokaAll +['[9, 10, 11, 12]\n'] +fp.close() +fp=open('zapis3.txt') +strokaAll=fp.readlines() +strokaAll +['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] +``` + +### 4.9 Ввод-вывод с помощью модуля pickle +Пример этого способа работы с файлами +``` +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} +fp=open('zapis6.mnz','wb') +fp.closed +False +pickle.dump(mnoz1,fp) +fp.close() +``` + +Теперь прочитаю из файла zapis6.mnz +``` +fp=open('zapis6.mnz','rb') +mnoz2=pickle.load(fp) +fp.close() +mnoz2 +{'book', 'pen', 'table', 'iPhone'} +mnoz1 == mnoz2 +True +``` +Как можно заметить, визуально файлы отличаются, но проверка на совпадение выдаёт результат True +mnoz2 не совпадает с тем, что было задано, потому что это множество. Оно исключает повторяющиеся элементы, оставляя только один, а еще не содержит конкретный порядок элементов. Но два множества равны, если у них равны все элементы и их одинаковое количество, вне зависимости от порядка, так что сравнение возвращает True. + +А теперь с использованием тех же функций запишите в файл, а затем прочитайте два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3. +``` +fp=open('zapis7.2ob','wb') +pickle.dump(mnoz1,fp) +pickle.dump(sps3,fp) +fp.close() +fp=open('zapis7.2ob','rb') +obj1=pickle.load(fp) +obj2=pickle.load(fp) +fp.close() +obj1,obj2 +({'book', 'pen', 'table', 'iPhone'}, [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]) +obj1 == mnoz1 +True +obj2 == sps3 +True +``` +Убедился в совпадении прочитанных данных с введёнными + + +## Пункт 5. Перенаправление потоков ввода и вывода +Пример 1 +``` +vr_out=sys.stdoutmnoz1 +fc=open('Stroka.txt','w') +sys.stdout=fc +print('запись строки в файл') +sys.stdout=vr_out +print('запись строки на экран') +запись строки на экран +fc.close() +``` +В результате получаю файл [Stroka.txt](Stroka.txt) со следующим содержанием +Рис. 6: +![Рис.6](photo6.png) + +Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла. + +``` +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: + break + +запись строки в файл +fd.close() +``` + +Вернул стандартное назначение потора ввода +``` +sys.stdin=tmp_in +``` +## Пункт 6 +Закончил сеанс работы с IDLE +