# Отчет по теме 6 Ефимова Людмила, А-03-23 ## 1. Запустила интерактивную оболочку и создала файл отчета ## 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 ``` После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, то следует использовать еще один аргумент. После end указано какими символами кончается строка ```py print(gg, fff,sep='/',end='***'); print('____') Значение температуры = /234.5***____ ``` Оператор вывода может располагаться на нескольких строках с использованием тройных кавычек ```py print(""" Здесь может выводиться большой текст, занимающий несколько строк""") Здесь может выводиться большой текст, занимающий несколько строк print("Здесь может выводиться", "большой текст,", "занимающий несколько строк") Здесь может выводиться большой текст, занимающий несколько строк ``` ### 2.3. Вывод с использованием метода write объекта sys.stdout. stdout представляет собой поток стандартного вывода – объект, в который программы выводят символьное представление данных. ```py import sys sys.stdout.write('Функция write') Функция write13 sys.stdout.write('Функция write\n') # \n перенос на следующую строку Функция write 14 ``` ## 3. Ввод данных с клавиатуры ```py psw=input('Введите пароль:') Введите пароль: 1234 psw ' 1234' type(psw) ``` Ввод с контролем значения ```py while True: znach=float(input('Задайте коэф.усиления = ')) if znach<17.5 or znach>23.8: print('Ошибка!') else: break Задайте коэф.усиления = 4 Ошибка! Задайте коэф.усиления = 20 ``` Вывод и обработка выражения, подлежащего расчету ```py import math print(eval(input('введите выражение для расчета = '))) введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) 1.34504378689765 ``` ## 4. Ввод-вывод данных при работе с файлами Работа с файлом требует указания источника данных - полного имени файла с путем доступа к его расположению. ### 4.1. Функции для работы с путем к файлу ```py os.getcwd () 'C:\\Users\\Людмила\\AppData\\Local\\Programs\\Python\\Python313' way = os.getcwd() # сохранили путь в переменную way 'C:\\Users\\Людмила\\AppData\\Local\\Programs\\Python\\Python313' ``` Установили новый рабочий каталог ```py os.chdir('H:\\study\\ПОАС') os.getcwd () 'H:\\study\\ПОАС' ``` В модуле os также есть функции, позволяющие удалять и создавать директории. ```py os.listdir() #Возвращает список имен файлов находящихся в рабочей директории ['New directory', 'report — копия.odt', 'report3.md', 'report4.md', 'report5.md', 'report6.txt', 'Ris1.png', 'Ris2.png', 'task.md', 'task3.md', 'task4.md', 'Методические указания по ПОАС.pdf', 'репозиторий', 'Тест по модулю 1 ПОАС.docx'] os.path.isdir("New directory"); os.path.isdir("test333") # Проверка наличия директории в рабочем каталоге True False os.rmdir('New directory') # Удаление директории os.listdir() ['report — копия.odt', 'report3.md', 'report4.md', 'report5.md', 'report6.txt', 'Ris1.png', 'Ris2.png', 'task.md', 'task3.md', 'task4.md', 'Методические указания по ПОАС.pdf', 'репозиторий', 'Тест по модулю 1 ПОАС.docx'] ``` Можно также получить путь к файлу ```py fil=os.path.abspath("report5.md") fil 'H:\\study\\ПОАС\\report5.md' drkt = os.path.dirname(fil) drkt 'H:\\study\\ПОАС' name = os.path.basename(fil) # Выделение имени файла name 'report5.md' directory, fileName = os.path.split(fil) # Разделяет путь к файлу на путь доступа к файлу и его имя (Возвращает кортеж из этих двух составляющих) print(directory);print(fileName) H:\study\ПОАС report5.md ``` Проверка указывает ли путь к нужному файлу ```py os.path.isfile(fil) # Проверка пути к файлу True os.path.isfile("test.txt") False ``` ### 4.2. Общая схема работы с файлами Для обмена данными с файлом необходимо выполнить следующие операции: Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); Выполнение одной или нескольких операций обмена данными с файлом; Закрытие файла. ### 4.3. Открытие файла для записи или чтения данных - функция open При открытии файла необходимо указать имя файлы (с путем, если он не в рабочем каталоге) и цель работы с ним. fp – это файловый объект, сохраняет ссылку на открываемый файл. w – запись с созданием нового файла или перезапись существующего файла, w+ - чтение и запись/перезапись файла, r – только чтение (это значение - по умолчанию), r+ - чтение и/или запись в существующий файл, a – запись в конец существующего файла или, если его нет, запись с созданием файла, a+ - то же, что и в «a», но с возможностью чтения из файла. ```py fp=open(file=drkt+'\\zapis1.txt',mode='w') # открыли файл для записи данных fp=open(drkt+'\\zapis1.txt','w') # имена аргументов можно опустить fp=open('zapis1.txt','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'] ``` ### 4.4. Закрытие файла ```py fp.close() ``` ### 4.5. Запись информации в файл Можно записать информацию в файл с помощью метода write ```py sps=list(range(1,13)) sps [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] fp2 = open("zapis3.txt", "w") # запись первых 4 значений и перенос строки 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 [1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] ``` Запись данных внутри цикла ```py sps3 = [["Иванов И.", 1], ["Петров П.", 2], ["Сидоров С.", 3]] for i in range(len(sps3)): stroka4=sps3[i][0]+' '+str(sps3[i][1]) fp3.write(stroka4) 11 11 12 fp3.close() ``` Содержимое файла ```py Иванов И. 1Петров П. 2Сидоров С. 3 ``` Запишем иначе ```py fp3=open('zapis5.txt','w') for r in sps3: fp3.write(r[0]+' '+str(r[1])+'\n') 12 12 13 for r in sps3: fp3.write(r[0]+' '+str(r[1])+'\n') # в одну строку 12 12 13 ``` Содержимое файла ```py Иванов И. 1 Петров П. 2 Сидоров С. 3 ``` ### 4.6. Чтение информации из текстового файла внутри цикла. Чтение данных из файла происходит последовательно, начиная с некоторого символа. В качестве примера прочитан ранее созданный файл zapis3.txt: ```py 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'] ``` Сделаем чтобы элементы совпадали с исходными ```py for i in range(len(sps1)): sps1[i] = int(sps1[i]) sps1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] ``` ### 4.7. Чтение информации с помощью метода read Метод read, также как и write, относится к объекту - файловой переменной. ```py fp=open('zapis3.txt') stroka1=fp.read(12) stroka2=fp.read() fp.close() stroka2 '\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n' stroka1 '[1, 2, 3, 4]' ``` ### 4.8. Чтение информации с помощью методов readline и readlines ```py fp = open("zapis3.txt") stroka1 = fp.readline() # Чтение первой строки файла stroka2 = fp.readline() # Чтение второй строки файла fp.close() fp = open("zapis3.txt") stroka3 = fp.readlines() # Чтение всех строк файла fp.close() stroka1 '[1, 2, 3, 4]\n' stroka2 '[5, 6, 7, 8]\n' stroka3 ['[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() fp=open('zapis6.mnz','rb') mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла fp.close() mnoz1 {'iPhone', 'pen', 'book', 'table'} mnoz2 {'pen', 'table', 'book', 'iPhone'} mnoz2 == mnoz1 True ``` Получение объекта из файла можно осуществить с помощью метода load: ```py fp = open("zapis6.mnz", "rb") mnoz2 = pickle.load(fp) # Получение объекта из файла fp.close() 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 {'pen', 'table', 'book', 'iPhone'} obj2 [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] ``` ## 5. Перенаправление потоков ввода и вывода данных. Потоки ввода-вывода можно перенаправлять, например в файл: ```py import sys vr_out = sys.stdout # Сохранение текущего потока вывода fc = open("Stroka.txt", "w") sys.stdout = fc # Перезапись потока вывода с экрана на файл print("Запись строки в файл") fc.close() sys.stdout = vr_out # Возвращение истинного значения потока вывода print("Запись строки на экран") Запись строки на экран ``` Содержимое файла ```py Запись строки в файл ``` Точно также можно перенаправить поток ввода – 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: break Запись строки в файл fd.close() ``` ## 6. Завершила работу со средой