# Отчёт по Теме 6 Таболин Иван, А-01-23 ## 1. Запуск среды IDLE и первоначальная настройка. ```py import os os.chdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6") ``` ## 2. Вывод данных на экран дисплея. ## 2.1. Вывод в командной строке. "Эхо-вывод" ```py stroka='Автоматизированная система управления';stroka 'Автоматизированная система управления' ``` ## 2.2. Вывод с использованием `print`. Вывод сразу нескольких объектов за одно обращение к функции. ```py fff=234.5;gg='Значение температуры = ' print(gg,fff) Значение температуры = 234.5 ``` По умолчанию выводимые объекты разделяются пробелом, но можно указать разделитель в отдельном аргументе `sep`. ```py print(gg,fff,sep='/') Значение температуры = /234.5 ``` После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, используется аргумент `end`. ```py print(gg,fff,sep='/',end='***');print('___') Значение температуры = /234.5***___ ``` С помощью обращения к функции `print` без указания аргументов можно перейти на новую строку. С помощью тройных кавычек оператор вывода может располагаться на нескольких строках ```py print("""Здесь может выводиться большой текст, занимающий несколько строк""") Здесь может выводиться большой текст, занимающий несколько строк print("Здесь может выводиться", "большой текст,", "занимающий несколько строк") Здесь может выводиться большой текст, занимающий несколько строк ``` В первом случае вывод осуществляется на разных строках в соответствии с аргументом функции (аргумент один). А во втором случае у функции три аргумента, разделитель между которыми по умолчанию является пробелом. ## 2.3. Вывод с помощью `write` объекта `sys.stdout`. ```py import sys sys.stdout.write('Функция write') Функция write13 sys.stdout.write('Функция write\n') Функция write 14 ``` Метод `write` объекта `sys.stdout` выводит текст и возвращает количество байтов, записанных в строку. ## 3. Ввод данных с клавиатуры. ```py psw=input('Введите пароль:') Введите пароль:12345 psw '12345' ``` Пример 1. Ввод с контрлем значения. ```py while True: znach=float(input('Задайте коэф. усиления = ')) if znach<17.5 or znach>23.8: print('Ошибка!') else: break Задайте коэф. усиления = 15.4 Ошибка! Задайте коэф. усиления = 21.6 ``` Пример 2. Ввод и обработка выражения, подлежащего расчету ```py print(eval(input('введите выражение для расчета = '))) введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) 1.34504378689765 ``` ## 4. Ввод-вывод при работе с файлами. Модуль `os` был импортирован в начале работы. ```py os.getcwd() 'C:\\Users\\User\\Desktop\\python-labs\\TEMA6' Tabolin=os.getcwd();print(Tabolin) C:\Users\User\Desktop\python-labs\TEMA6 Tabolin 'C:\\Users\\User\\Desktop\\python-labs\\TEMA6' ``` Изучение некоторых методов модуля `os`. ```py os.mkdir("directory1") # создание папки directory1 os.rmdir("directory1") # удаление папки directiry1 os.listdir() # вывод всех папок рабочего каталога ['.gitkeep', 'report6.md', 'Ris1.png', 'Ris2.png'] import os.path os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6") # проверяет наличие указанного пути в рабочем каталоге True os.path.isdir("C:\\Users\\User\\Desktop\\python-labs") True os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6\\report6.md") False ``` ```py fil=os.path.abspath("oplata.dbf") print(fil) C:\Users\User\Desktop\python-labs\TEMA6\oplata.dbf ``` ```py fil=os.path.abspath("report6.md") print(fil) C:\Users\User\Desktop\python-labs\TEMA6\report6.md ``` Выделение пути доступа к файлу и имя файла из строки, полученной в результате выполнения метода `os.path.abspath` ```py drkt=os.path.dirname(fil) print(drkt) C:\Users\User\Desktop\python-labs\TEMA6 name=os.path.basename(fil);print(name) report6.md ``` ```py os.path.split(fil) # создает кортеж с двумя элементами: путь к файлу и название файла ('C:\\Users\\User\\Desktop\\python-labs\\TEMA6', 'report6.md') type(os.path.split(fil)) ``` ```py os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA6') # проверяет .существует ли путь True os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA5') True os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA10') False os.path.isfile(fil) # проверяет наличие файла с известным расположением True ``` ## 4.2. Общая схема работы с файлом. Для обмена данными с файлом необходимо выполнить слдующие операции: открыть файл с указанием его имени и цели (чтение, запись, добавление данных) выполнить одну или несколько операций обмена данными с файлом закрыть файл ## 4.3. Открытие файла для записи или чтения данных. Выполняется с помощью функции `open`. ```py fp=open(file=drkt+'\\zapis1.txt',mode='w') ``` `fp` - файловый объект, он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя файла. В качестве аргументов указывается путь и имя, открываемого файла, а также цель использования (`w=write` - для записи). ```py 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'] ``` Некоторые значения аргумента `mode`: w – запись с созданием нового файла или перезапись существующего файла, w+ - чтение и запись/перезапись файла, r – только чтение (это значение - по умолчанию), r+ - чтение и/или запись в существующий файл, a – запись в конец существующего файла или, если его нет, запись с созданием файла, a+ - то же, что и в «a», но с возможностью чтения из файла. Для того, чтобы открыть бинарный файл требуется добавить символ `b` указанным выше значениям аргумента `mode`, например: ```py fp1=open(drkt+'\\zapis2.bin',mode='wb+') ``` Значение символьного файла `t` указывается по умолчанию, указывать его не требуется. ## 4.4. Закрытие файла. ```py fp.close() fp1.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() ``` ```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() ``` ```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() print(sps1) ['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] ``` ```py sps2=[] for i in sps1: sps2.append(int(i)) print(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) stroka2=fp.read() fp.close() print(stroka1,stroka2,sep='\n') [1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] ``` ## 4.8. Третий способ чтения ифнормации. С помощью методов `readline` и `readlines`. `readline` читает одну строку, начиная с положения маркера `readlines` читает все строки и возвращает список ```py fp=open('zapis3.txt', 'r') stroka1=fp.readline();print(stroka1) [1, 2, 3, 4] stroka2=fp.readline();print(stroka2) [5, 6, 7, 8] fp.close() fp=open('zapis3.txt','r') # файл открыт заново, для того чтобы вернуть маркер в начало vse_stroki=fp.readlines();print(vse_stroki) ['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] vse_stroki ``` ## 4.9. Ввод-вывод объектов. С использованием функций из модуля `pickle` ```py import pickle mnoz1={'pen','book','pen','iPhone','table','book'} fp=open('zapis6.mnz','wb') pickle.dump(mnoz1, fp) fp.close() ``` ```py fp=open('zapis6.mnz','rb') mnoz2=pickle.load(fp) fp.close() print(mnoz2) {'book', 'pen', 'iPhone', 'table'} mnoz1 == mnoz2 True ``` ```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) obj2=pickle.load(fp) fp.close() print(obj1,obj2,sep='\n') {'book', 'pen', 'iPhone', 'table'} [['Иванов И.', 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() ``` ```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: # выход из цикла, когда заканчивается файл break запись строки в файл fd.close() sys.stdin=tmp_in # возвращаем предыдущий поток ввода ``` ## 6. Закончили сеанс работы. Сохранил созданный файл протокола и завершил сеанс работы с IDLE.