# Отчет по Теме 6 Похил Анастасия, А-02-23 ## 1. Запущена интерактивная оболочка IDLE. ## 2. Вывод данных на экран дисплея. ### 2.1. Вывод в командной строке "Эхо-вывод" ```py stroka='Автоматизированная система управления' stroka 'Автоматизированная система управления' ``` ### 2.2. Вывод с использованием функции print Пример вывода: ```py fff=234.5;gg='Значение температуры = ' print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции Значение температуры = 234.5 ``` По умолчанию выводимые объекты разделяются одним пробелом. Если нужен другой разделитель его можно указать в отдельном аргументе sep: ```py fff=234.5;gg='Значение температуры = ' print(gg, fff, sep='/') Значение температуры = /234.5 ``` Если курсор надо оставить в той же строке, то следует использовать еще один аргумент. После end= надо указать какими символами должна закончиться выводимая строка или указать пустую строку. ```py print(gg, fff,sep='/',end='***'); print('____') Значение температуры = /234.5***____ ``` Наконец, оператор вывода может располагаться на нескольких строках с использованием тройных кавычек. ```py print(""" Здесь может выводиться большой текст, занимающий несколько строк""") Здесь может выводиться большой текст, занимающий несколько строк print("Здесь может выводиться", "большой текст,", "занимающий несколько строк") Здесь может выводиться большой текст, занимающий несколько строк ``` Тройные кавычки сохраняют переносы строк, выводя текст в несколько строк, а несколько аргументов в print() разделяются пробелами и выводятся в одну строку. ### 2.3. Вывод с использованием метода write объекта sys.stdout. Объект stdout представляет собой поток стандартного вывода – объект, в который программы вы-водят символьное представление данных. ```py import sys sys.stdout.write('Функция write') Функция write13 sys.stdout.write('Функция write\n') Функция write 14 ``` Этот метод после вывода строки не осуществляет переход на новую строку. Если это требуется, то следует в конце строки добавить один или несколько символов “\n”. Функция write() возвращает число — количество успешно записанных символов. ## 3. Ввод данных с клавиатуры Для ввода с клавиатуры используется функция input. Полученный объект имеет строковый тип данных. ```py psw=input('Введите пароль:') Введите пароль:12345 psw '12345' type(psw) ``` Пример 1. Ввод с контролем значения. ```py while True: znach=float(input('Задайте коэф.усиления = ')) if znach<17.5 or znach>23.8: print('Ошибка!') else: break Задайте коэф.усиления = 15.4 Ошибка! Задайте коэф.усиления = 21.6 ``` Пример 2. Ввод и обработка выражения. ```py import math print(eval(input('введите выражение для расчета = '))) введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) 1.34504378689765 ``` ## 4. Ввод-вывод при работе с файлами. ### 4.1 Функции для работы с путем к файлу. Используя функцию os.getcwd(), можно получить путь к текущему рабочему каталогу. При обычном эхо-выводе отображаются двойные обратные слэши, при использовании print() - одинарные. ```py import os os.getcwd() 'C:\\Users\\Настя\\AppData\\Local\\Programs\\Python\\Python313' Pohil=os.getcwd(); print(Pohil) C:\Users\Настя\AppData\Local\Programs\Python\Python313 ``` Была использована функция os.chdir() для смены рабочего каталога. ```py os.chdir('C:\\Users\\Настя\\Desktop\\python-labs\\TEMA6') os.getcwd() 'C:\\Users\\Настя\\Desktop\\python-labs\\TEMA6' ``` Функция os.mkdir() создаёт новый каталог. ```py os.mkdir('katalog1') os.chdir('katalog1') os.getcwd() 'C:\\Users\\Настя\\Desktop\\python-labs\\TEMA6\\katalog1' ``` Функция os.listdir() возвращает список каталогов и файлов, находящихся внутри данного каталога. ```py os.chdir('../') os.listdir() ['.gitkeep', '123.py', 'katalog1', 'report.md'] ``` Удаление каталога через os.rmdir(). ```py os.rmdir('katalog1') os.listdir() ['.gitkeep', '123.py', 'report.md'] ``` os.path.isdir() позволяет проверить наличие каталога. Для несуществующих каталогов, ровно как и для любых файлов, которые не являются в свою очередь каталогами - возвращает False. ```py os.path.isdir('report.md') False os.chdir('../') os.path.isdir('TEMA6') True ``` Был получен путь до файла, имя которого передаётся в качестве аргумента в os.path.abspath(). Затем из абсолютного пути был извлечен путь до каталога, в котором находится файл, затем имя самого файла, после чего был получен кортеж с путём до каталога и именем файла, находящегося внутри него. ```py fil=os.path.abspath('report.md'); print(fil) C:\Users\Настя\Desktop\python-labs\report.md fil = os.path.abspath("oplata.dbf") drkt=os.path.dirname(fil); print(drkt) C:\Users\Настя\Desktop\python-labs bsn=os.path.basename(fil); print(bsn) oplata.dbf os.path.split(fil) ('C:\\Users\\Настя\\Desktop\\python-labs', 'oplata.dbf') ``` Проверено наличие файла с известным расположением с помощью функции os.path.exists. Возвращаемое значение: True или False. ```py os.path.exists(fil) True fil1=drkt+'\\katalog1'; print(fil1) C:\Users\Настя\Desktop\python-labs\TEMA6\katalog1 os.path.exists(fil1) False ``` Проверка на наличие файла с известным расположением. ``` os.path.isfile(fil) True os.path.isfile(os.path.dirname(fil)+'fil1.txt') False ``` dirname() возвращает путь, то os.path.basename() возвращает имя файла ### 4.2. Общая схема работы с файлом Для обмена данными с файлом необходимо выполнить следующие операции: 1. Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); 2. Выполнение одной или нескольких операций обмена данными с файлом; 3. Закрытие файла. ### 4.3. Открытие файла для записи или чтения данных – функция open Был создан файловый объект fp класса _io.TextIOWrapper для работы с текстовыми данными. В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования. Файл по такой инструкции открывается только для записи в файл. Если требуются другие операции с открываемым файлом, то для второго аргумента mode могут быть заданы следующие значения: w – запись с созданием нового файла или перезапись существующего файла, w+ - чтение и запись/перезапись файла, r – только чтение (это значение - по умолчанию), r+ - чтение и/или запись в существующий файл, a – запись в конец существующего файла или, если его нет, запись с созданием файла, a+ - то же, но с возможностью чтения из файла. ```py fp=open(file=drkt+'\\zapis1.txt',mode='w') 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'] ``` Вообще говоря, аргументы функции при указании их имен могут располагаться в любом порядке. Если же имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать, а вводить в соответствующем порядке. Также если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла. ```py fp=open(drkt+'\\zapis1.txt','w') fp=open('zapis1.txt','w') ``` Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ b. ``` fp1=open(drkt+'\\zapis2.bin',mode='wb+') ``` ### 4.4. Закрытие файла. Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. ```py fp.close() ``` ### 4.5. Запись информации в файл с помощью метода write Метод 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: ```py [1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] ``` Пример со списком, содержащим внутри себя списки. Первая попытка: ``` 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: ```py Иванов И. 1Петров П. 2Сидоров С. 3 ``` Добавляем '\n': ```py gh=open('zapis5.txt','w') for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') 12 12 13 gh.close() ``` Новое одержимое файла zapis4.txt: ```py Иванов И. 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() ``` ```py Иванов И. 1 Петров П. 2 Сидоров С. 3 ``` ### 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] ``` Полученный при чтении файла список sps1 содержит элементы строкового типа (необходим целочисленный, как в sps). Преобразуем элементы списка: ```py sps3=list(map(int, sps1)) sps3 [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() stroka1; stroka2 '[1, 2, 3, 4]' '\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n' ``` ### 4.8. Чтение информации с помощью методов readline и readlines. ```py fp=open('zapis3.txt') s1=fp.readline() s2=fp.readlines() fp.close() s1; s2 '[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) fp.close() ``` Содержимое файла zapis6.mnz: ```py Ђ•# Џ”(Њpen”Њtable”Њbook”ЊiPhone”ђ. ``` При прочтении данных из файла было получено то же самое множество, что и созданное ранее. ```py fp=open('zapis6.mnz','rb') mnoz2=pickle.load(fp) fp.close() mnoz2 {'book', 'table', 'pen', 'iPhone'} 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() obj1; obj2 {'book', 'table', 'pen', 'iPhone'} [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] obj1 == mnoz1; obj2 == sps3 True True ``` ## 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: ```py запись строки в файл ``` Подобным образом можно перенаправить и поток ввода. ```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.