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/photo1.png b/TEMA6/photo1.png new file mode 100644 index 0000000..0aafba0 Binary files /dev/null and b/TEMA6/photo1.png differ diff --git a/TEMA6/photo2.png b/TEMA6/photo2.png new file mode 100644 index 0000000..367b2f4 Binary files /dev/null and b/TEMA6/photo2.png differ diff --git a/TEMA6/photo3.png b/TEMA6/photo3.png new file mode 100644 index 0000000..a076493 Binary files /dev/null and b/TEMA6/photo3.png differ diff --git a/TEMA6/protocol6.py b/TEMA6/protocol6.py new file mode 100644 index 0000000..bb0b6f9 --- /dev/null +++ b/TEMA6/protocol6.py @@ -0,0 +1,183 @@ +# ТЕМА 6 "Зеленкина Ксения Михайловна" + +## 2.2. +fff=234.5;gg='Значение температуры = ' +print(gg, fff) +print(gg, fff, sep="/") +print(gg, fff,sep='/',end='***'); print('____') + +print(""" Здесь может выводиться +большой текст, +занимающий несколько строк""") + +print("Здесь может выводиться", + "большой текст,", + "занимающий несколько строк") + +## 2.3. +import sys +sys.stdout.write('Функция write') +sys.stdout.write('Функция write\n') + +# 3. +#psw=input('Введите пароль:') +#print(type(psw)) + +# Пример 1 +#while True: +# znach=float(input('Задайте коэф.усиления = ')) +# if znach<17.5 or znach>23.8: +# print('Ошибка!') +# else: +# break + +#Пример 2 +#import math +#print(eval(input('введите выражение для расчета = '))) + +## 4.1. +import os +ZelenkinaKs = os.getcwd() +print(ZelenkinaKs) +os.chdir('C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA5') +print(os.getcwd()) +os.chdir('C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA6') + +import os +from os.path import isdir +# Создание папки +os.mkdir("test_folder") +# Проверка существования папки +print(isdir("test_folder")) +# Просмотр содержимого текущей директории +print(os.listdir()) +# Просмотр содержимого конкретной папки +print(os.listdir("test_folder")) +# Удаление папки (должна быть пустой) +os.rmdir("test_folder") +# Проверка после удаления +print(isdir("test_folder")) + +fil=os.path.abspath("Отчет6.md") +print(fil) +drkt=os.path.dirname(fil) +print(drkt) +nameFile = os.path.basename(fil) +print(nameFile) +SplitFile = os.path.split(fil) +print(SplitFile) +print(os.path.exists("\\python-labs\\TEMA6")) +print(os.path.exists("C:\\Users\\user\\")) +print(os.path.exists("Отчет6.md")) +print(os.path.exists(".")) + +exists = os.path.isfile("C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA6\\Отчет6.md") +print(exists) + +fp=open(file=drkt+'\\zapis1.txt',mode='w') +print(type(fp)) +fp.close() + +sps=list(range(1,13)) +fp2=open('zapis3.txt','w') +fp2.write(str(sps[:4])+'\n') +fp2.write(str(sps[4:8])+'\n') +fp2.write(str(sps[8:])+'\n') +fp2.close() + +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) +fp3.close() + +gh = open('zapis5.txt', 'w') +for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') +gh.close() + +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() +print(sps1) + +sps1 = [] +fp = open('zapis3.txt') +for stroka in fp: + stroka = stroka.rstrip('\n') + stroka = stroka.replace('[','') + stroka = stroka.replace(']','') + chisla_str = stroka.split(',') + chisla = [int(x) for x in chisla_str if x] + sps1.append(chisla) +fp.close() +for podspisok in sps1: + print(f"[{', '.join(map(str, podspisok))}]") + +fp=open('zapis3.txt') +stroka1=fp.read(12) +stroka2=fp.read() +fp.close() +print(stroka1) +print(stroka2) + +fp=open('zapis3.txt') +stroka3=fp.readline(5) +stroka4=fp.readlines() +print(stroka3) +print(stroka4) + +## 4.9. +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество» +fp=open('zapis6.mnz','wb') # Бинарный файл – на запись +pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл +fp.close() + +fp=open('zapis6.mnz','rb') +mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +fp.close() +print(mnoz2) +print(mnoz1) + +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() +print(obj1) +print(mnoz1) +print(obj2) +print(sps3) + +## 5. +import sys +vr_out=sys.stdout #Запоминаем текущий поток вывода +fc=open('Stroka.txt','w') #Откроем файл вывода +sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл +print('запись строки в файл') #Вывод теперь будет не на экран, а в файл +sys.stdout=vr_out #Восстановление текущего потока +print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился +fc.close() + +import sys +tmp_in = sys.stdin #Запоминаем текущий поток ввода +fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения) +sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры +print(sys.stdin) +while True: + try: + line = input () #Считываем из файла строку + print(line) # Отображаем считанное + except EOFError: + break +fd.close() +sys.stdin=tmp_in #Не забыть вернуть стандартное назначение для потока ввода diff --git a/TEMA6/zapfile3.txt b/TEMA6/zapfile3.txt new file mode 100644 index 0000000..e69de29 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..03d742b --- /dev/null +++ b/TEMA6/zapis2.bin @@ -0,0 +1 @@ +Тут какое то значение \ No newline at end of file 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 0000000..68f33e0 Binary files /dev/null and b/TEMA6/zapis6.mnz differ diff --git a/TEMA6/zapis7.2ob b/TEMA6/zapis7.2ob new file mode 100644 index 0000000..e446994 Binary files /dev/null and b/TEMA6/zapis7.2ob differ diff --git a/TEMA6/Отчет6.md b/TEMA6/Отчет6.md new file mode 100644 index 0000000..59436f4 --- /dev/null +++ b/TEMA6/Отчет6.md @@ -0,0 +1,550 @@ +# Отчет по Теме 6 + +Зеленкина Ксения, А-02-23 + +## 1. Начало работы. +Запустила интерактивную оболочку IDLE и открыла окно текстового редактора, куда буду фиксировать мои дальнейшие действия. + +## 2. Вывод данных на экран дисплея. +#### 2.1. Вывод в командной строке. +Cодержимое любого объекта можно увидеть простым упоминанием его в командной строке (как это много раз делалось раньше), например: +```py +>> stroka='Автоматизированная система управления' +>> stroka +``` +_Вывод:_ +```py +'Автоматизированная система управления' +``` +Этот способ называется __«эхо-выводом»__. + + +#### 2.2. Вывод с использованием функции __print__. +Пример вывода: +```py +>> fff=234.5;gg='Значение температуры = ' +>> print(gg, fff) +``` + +_Вывод:_ +```py +Значение температуры = 234.5 +``` +По умолчанию выводимые объекты разделяются одним пробелом. Если нужен другой разделитель его можно указать в отдельном аргументе _sep_, например: + +```py +print(gg, fff, sep='/') +``` + _Вывод:_ +```py +Значение температуры = /234.5 + +``` +После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, то следует использовать еще один аргумент, например: + +```py +print(gg, fff,sep='/',end='***'); print('____') +``` + + _Вывод:_ +```py +Значение температуры = /234.5***____ +``` +После end= надо указать какими символами должна закончиться выводимая строка или указать пустую строку. Наоборот, если в какой-то момент требуется просто перейти на новую строку, можно использовать такое обращение к функции: + +```py +print() +``` + +Оператор вывода может располагаться на нескольких строках с использованием тройных кавычек: +```py +print(""" Здесь может выводиться +большой текст, +занимающий несколько строк""") +``` +_Вывод:_ +```py + Здесь может выводиться +большой текст, +занимающий несколько строк +``` +Или + +```py +print("Здесь может выводиться", + "большой текст,", + "занимающий несколько строк") +``` + +_Вывод:_ +```py +Здесь может выводиться большой текст, занимающий несколько строк +``` + +#### 2.3. Вывод с использованием метода __write__ объекта __sys.stdout__. +Объект stdout представляет собой поток стандартного вывода – объект, в который программы выводят символьное представление данных. Обычно это – экран дисплея. Объект находится в модуле sys, который надо импортировать. Например: +```py +import sys +sys.stdout.write('Функция write') +``` +_Вывод:_ +```py +Функция write +``` + +Этот метод после вывода строки не осуществляет переход на новую строку. Если это требуется, то следует в конце строки добавить один или несколько символов “\n”: + +```py +sys.stdout.write('Функция write\n') +``` +_Вывод:_ +```py +Функция write + +``` + +## 3. Ввод данных с клавиатуры. +Для ввода используйте уже знакомую функцию _input__. Например: + +```py +psw=input('Введите пароль:') +``` + +_Вывод:_ +```py +Введите пароль:12345 + +``` +Посмотрим тип данной переменной: +```py +print(type(psw)) +``` + +_Вывод:_ +```py + +``` + +_Пример 1._ Ввод с контролем значения. Пусть вводится число, которое должно находиться в интервале значений от 17.5 до 23.8. +```py +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break +``` + +_Вывод:_ +```py +Задайте коэф.усиления = 15.4 +Ошибка! +Задайте коэф.усиления = 21.6 +``` + +_Пример 2_. Ввод и обработка выражения, подлежащего расчету. +```py +import math +print(eval(input('введите выражение для расчета = '))) +``` + +_Вывод:_ +```py +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 +``` + +## 4. Ввод-вывод при работе с файлами. +#### 4.1. Функции для работы с путем к файлу. + +Как и в других системах, в среде __Python__ в любой момент времени подразумевается некоторый рабочий каталог. Какой рабочий каталог установлен в текущий момент времени? Это можно узнать с помощью функцииos.getcwd (cwd = current working directory): +```py +import os +os.getcwd() +``` + +_Вывод:_ +'C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA6' +``` + +Сохраним этот путь в переменной с именем, совпадающим с моей фамилией в латинской транскрипции. Отобразите её значение с помощью функции __print__. + +```py +import os +ZelenkinaKs = os.getcwd() +print(ZelenkinaKs) +``` + +_Вывод:_ +```py +'C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA6' +``` + +Изменить расположение рабочего каталога можно обращением к уже многократно применявшейся функции __os.chdir__, аргументом которой будет символьная строка с указанием пути к каталогу, назначаемому в качестве рабочего, например: + +```py +os.chdir('C:\Users\user\OneDrive\Documents\ZelenkinaKs\python-labs\TEMA5') +print(os.getcwd()) +``` +_Вывод:_ +```py +'C:\Users\user\OneDrive\Documents\ZelenkinaKs\python-labs\TEMA5' +``` + +Самостоятельно изучим и попробуем использовать следующие функции из модуля __os__: _mkdir, rmdir, listdir и функцию isdir из вложенного в os модуля os.path_. +```py +import os +from os.path import isdir +# Создание папки +os.mkdir("test_folder") +# Проверка существования папки +print(isdir("test_folder")) +# Просмотр содержимого текущей директории +print(os.listdir()) +# Просмотр содержимого конкретной папки +print(os.listdir("test_folder")) +# Удаление папки (должна быть пустой) +os.rmdir("test_folder") +# Проверка после удаления +print(isdir("test_folder")) +``` +_Вывод:_ +```py +True +['.gitkeep', 'protocol6.py', 'test_folder'] +[] +False +``` + +Изучили и выяснили, что: +__mkdir()__ - создает одну папку +__rmdir()__ - удаляет только пустые папки +__listdir()__ - возвращает список содержимого +__isdir()__ - проверяет, является ли путь папкой + +Пусть в рабочем каталоге находится файл Отчет6.md. С помощью функции __os.path.abspath__ получим символьную строку, содержащую имя файла вместе с полным путем доступа к нему: + +```py +fil=os.path.abspath("Отчет6.md") +print(fil) +``` +_Вывод:_ +```py +C:\Users\user\OneDrive\Documents\ZelenkinaKs\python-labs\TEMA6\Отчет6.md +``` +Выделим путь доступа к файлу из строки, содержащей и этот путь, и имя файла с помощью функции __os.path.dirname__: +```py +drkt=os.path.dirname(fil) +print(drkt)) +``` +_Вывод:_ +```py +C:\Users\user\OneDrive\Documents\ZelenkinaKs\python-labs\TEMA6 +``` +Наоборот, выделим имя файла из этой строки с отбрасыванием пути с помощью функции __os.path.basename__. +```py +nameFile = os.path.basename(fil) +print(nameFile) +``` +_Вывод:_ +```py +Отчет6.md +``` + +Самостоятельно изучим функцию __os.path.split__: +```py +SplitFile = os.path.split(fil) +print(SplitFile) +``` +_Вывод:_ +```py +('C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA6', 'Отчет6.md') +``` +__os.path.split(path)__ - возвращает кортеж (путь, имя_файла) + +С помощью функции __os.path.exists__ можно проверить существует ли путь, заданный в символьной строке – аргументе функции. +```py +print(os.path.exists("\\python-labs\\TEMA6")) +print(os.path.exists("C:\\Users\\user\\")) +print(os.path.exists("Отчет6.md")) +print(os.path.exists(".")) +``` +_Вывод:_ +```py +False +True +True +True +``` +__os.path.exists()__ - проверяет существование пути. + +Проверим наличие файла с известным расположением с помощью функции __os.path.isfile__, аргументом которой должна быть символьная строка с путем и именем интересующего файла. +```py +exists = os.path.isfile("C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA6\\Отчет6.md") +print(exists) +``` +_Вывод:_ +```py +True +``` + +#### 4.2. Общая схема работы с файлом. +Для обмена данными с файлом необходимо выполнить следующие операции: + • Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); + • Выполнение одной или нескольких операций обмена данными с файлом; + • Закрытие файла. + +#### 4.3. Открытие файла для записи или чтения данных – функция __open__. +При открытии файла необходимо указать имя файлы (с путем, если он не в рабочем каталоге) и цель работы с ним. Для открытия используется функция __open__. +Открываем файл zapis1.txt для записи разными способами: +```py +fp=open(file=drkt+'\\zapis1.txt',mode='w') +print(type(fp)) +``` +_Вывод:_ +```py + +``` + +Более короткая запись (без имен аргументов): +```py +fp = open(drkt + '\\zapis1.txt', 'w') +``` + +Если файл в рабочем каталоге - путь можно опустить: +Более короткая запись (без имен аргументов): +```py +fp = open('zapis1.txt', 'w') +``` + +Разные режимы открытия файла: + __w__ – запись с созданием нового файла или перезапись существующего файла, + __w+__ - чтение и запись/перезапись файла, + __r__ – только чтение (это значение - по умолчанию), + __r+__ - чтение и/или запись в существующий файл, + __a__ – запись в конец существующего файла или, если его нет, запись с созданием файла, + __a+__ - то же, что и в «a», но с возможностью чтения из файла. + +Бинарные файлы: +fp_bin = open('data.bin', 'wb+') + +Символьные файлы (по умолчанию): +fp_text = open('data.txt', 'wt') + +#### 4.4. Закрытие файла. + +Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. Это делается с помощью метода __close__, применяемого к объекту – файловой переменной. Например: +```py +fp.close() +``` + +#### 4.5 Запись информации в файл с помощью метода __write__. +Метод __write__ относится к объекту – файловой переменной. +_Рассмотрим его применение на следующем примере:_ создадим список с элементами-числами от 1 до 12 и запишите их в файл по 4 числа на строке: +```py +sps=list(range(1,13)) +fp2=open('zapis3.txt','w') +fp2.write(str(sps[:4])+'\n') +fp2.write(str(sps[4:8])+'\n') +fp2.write(str(sps[8:])+'\n') +fp2.close() +``` +В файле появилась следующая запись: +```py +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] +``` + +Ещё один пример. Создадим список с элементами-списками: +```py +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +``` +Пусть его элементы требуется построчно записать в файл zapis4.txt. +Первая попытка: +```py +fp3=open('zapis4.txt','w') +for i in range(len(sps3)): + stroka4=sps3[i][0]+' '+str(sps3[i][1]) + fp3.write(stroka4) +fp3.close() +``` +В файле появилась следующая запись: + + +Тогда попробуйте сделать так: +```py +gh = open('zapis5.txt', 'w') +for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') +gh.close() +``` + +_Вывод:_ + + + +#### 4.6. Первый способ чтения информации из текстового файла. +Прочитаем информацию из ранее созданного файла zapis3.txt. +```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() +print(sps1) +``` +_Вывод:_ +```py +['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] +``` +Обратим внимание, что в функции открытия файла использован только один аргумент, остальные – со значениями «по умолчанию». +Здесь, перед занесением строки в список с помощью метода __rstrip__, из неё удаляется символ конца строки, а с помощью метода __replace__ – скобки. + +Список sps1 отличается от записи в файле тем, что: +sps1 - это список строк, а содержимое zapis3.txt - это вывод нескольких списков целых чисел. Такде в sps1 каждый элемент это _строка_, а в содержимом zapis3.txt - это целые числа. + Подумаем, как сделать так, чтобы список, полученный при чтении из файла, совпал с исходным: +```py +sps1 = [] +fp = open('zapis3.txt') +for stroka in fp: + stroka = stroka.rstrip('\n') + stroka = stroka.replace('[','') + stroka = stroka.replace(']','') + chisla_str = stroka.split(',') + chisla = [int(x) for x in chisla_str if x] + sps1.append(chisla) +fp.close() +for podspisok in sps1: + print(f"[{', '.join(map(str, podspisok))}]") +``` +_Вывод:_ +```py +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] +``` + +#### 4.7. Чтение информации из файла с помощью метода __read__. +Метод __read()__ читает данные из файла (текстового или бинарного) и возвращает строку или байтовую последовательность. Можно указать, сколько символов/байт прочитать; если не указать - прочитает всё до конца файла. Например: +```py +fp=open('zapis3.txt') +stroka1=fp.read(12) +stroka2=fp.read() +fp.close() +print(stroka1) +print(stroka2) +``` +_Вывод:_ +```py +[5, 6, 7, 8] +[9, 10, 11, 12] +``` + +#### 4.8. Чтение информации с помощью методов __readline__ и __readlines__. +__readline()__ читает одну строку из файла, начиная с текущей позиции. +__readlines()__ читает все строки, возвращая их в виде списка. +```py +fp=open('zapis3.txt') +stroka3=fp.readline(5) +stroka4=fp.readlines() +print(stroka3) +print(stroka4) +``` +_Вывод:_ +```py +[1, 2 +[', 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] +``` + +#### 4.9. Ввод-вывод объектов с использованием функций из модуля __pickle__. +В модуле __pickle__ содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти. Рассмотрите этот способ работы с файлами на следующем примере: +```py +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество» +fp=open('zapis6.mnz','wb') # Бинарный файл – на запись +pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл +fp.close() +``` +_Вывод:_ + + +Теперь прочитаем данные из файла в объект __mnoz2__: +```py +fp=open('zapis6.mnz','rb') +mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +fp.close() +print(mnoz2) +``` +_Вывод:_ +```py +{'book', 'pen', 'iPhone', 'table'} +``` +Данные переменные имеют тип данных set, что является неупорядоченной коллекцией. +__mnoz1__ и __mnoz2__ — это одно и то же множество, просто при его выводе на экран элементы могут быть показаны в разном порядке. + +А теперь с использованием тех же функций запишим в файл, а затем прочитаем два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3. При считывании объекты извлекаются из файла в той же последовательности, в которой они в него записывались. +```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() +print(obj1) +print(mnoz1) +print(obj2) +print(sps3) +``` +_Вывод:_ +```py +{'book', 'table', 'iPhone', 'pen'} +{'book', 'table', 'iPhone', 'pen'} +[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] +[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] +``` +obj1 совпадает с mnoz1, а obj2 c sps3. + +#### 5.Перенаправление потоков ввода и вывода данных. +```py +import sys +vr_out=sys.stdout #Запоминаем текущий поток вывода +fc=open('Stroka.txt','w') #Откроем файл вывода +sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл +print('запись строки в файл') #Вывод теперь будет не на экран, а в файл +sys.stdout=vr_out #Восстановление текущего потока +print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился +fc.close() +``` +_Вывод:_ +```py +запись строки на экран +``` +В результате создан файл Stroka.txt в текущем каталоге с содержанием +__'запись строки в файл'__ +Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла. +```py +import sys +tmp_in = sys.stdin #Запоминаем текущий поток ввода +fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения) +sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры +print(sys.stdin) +while True: + try: + line = input () #Считываем из файла строку + print(line) # Отображаем считанное + except EOFError: + break +fd.close() +sys.stdin=tmp_in #Не забыть вернуть стандартное назначение для потока ввода +``` +_Вывод:_ +```py +<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'> +запись строки в файл +``` +## Завершение работы. \ No newline at end of file