# Отчет по теме 6 Махнов Георгий, А-01-23 ## Тема 6. Ввод-вывод данных и операции с файлами ### 2. Вывод данных на экран дисплея. ```py >>> stroka='Автоматизированная система управления' >>> stroka 'Автоматизированная система управления' >>> fff=234.5;gg='Значение температуры = ' ``` #### 2.1 функция `print` ```py >>> print(gg, fff) Значение температуры = 234.5 >>> print(gg, fff, sep='/') Значение температуры = /234.5 >>> print(gg, fff,sep='/',end='***'); print('____') Значение температуры = /234.5***____ >>> print() >>> print(""" Здесь может выводиться ... большой текст, ... занимающий несколько строк""") Здесь может выводиться большой текст, занимающий несколько строк >>> print("Здесь может выводиться", ... "большой текст,", ... "занимающий несколько строк") Здесь может выводиться большой текст, занимающий несколько строк ``` #### 2.2 метод `write` ```py import sys >>> sys.stdout.write('Функция write') Функция write13 >>> sys.stdout.write('Функция write\n') Функция write 14 ``` Выводимое число - количество символов, включая пробелы и переносы. sys.stdout.write() - функция, которая выводит на экран дисплея (или любой другой поток стандартного вывода) эхо-выводом строку, которую внесли в функцию, и возвращает число - количество символов. В отличие от print() требует передачи только строковых аргументов и на выводе не переносит на новую строку. ### 3. Ввод данных с клавиатуры ```py >>> psw=input('Введите пароль:') Введите пароль:12345 >>> psw '12345' >>> type(psw) >>> while True: ... znach = float(input("Задайте коэф.усиления = ")) ... if znach < 17.5 or znach > 23.8: ... print("Ошибка!") ... else: ... break ... Задайте коэф.усиления = 15.4 Ошибка! Задайте коэф.усиления = 21.6 >>> import math >>> print(eval(input('введите выражение для расчета = '))) введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) 1.34504378689765 ``` ### 4 Ввод-вывод при работе с файлами #### 4.1 Функции для работы с путем к файлу ```py >>> >>> import os >>> Makhnov = os.getcwd() >>> print(Makhnov) "C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs" >>> os.chdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs/TEMA6") >>> os.getcwd() 'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6' >>> os.mkdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs/LAB6") >>> os.rmdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs/LAB6") >>> os.listdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs") ['.git', '.gitignore', 'README.md', 'TEMA0', 'TEMA1', 'TEMA2', 'TEMA3', 'TEMA4', 'TEMA5', 'TEMA6', 'TEMA7', 'TEMA8', 'TEMA9'] >>> fil = os.path.abspath("report.md") >>> fil 'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6\\report.md' >>> drkt=os.path.dirname(fil) >>> drkt 'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6' >>> os.path.basename(fil) 'report.md' >>> os.path.split(fil) ('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6', 'report.md') ``` Возвращает кортеж с двумя объектами - путем к директории и именем файла ```py >>> os.path.exists('some.md') False >>> os.path.isfile('task.md') False >>> os.path.isfile('report.md') True ``` #### 4.3 Открытие файла для записи или чтения данных – функция `open` ```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__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__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'] >>> fp1=open(drkt+'\\zapis2.bin',mode='wb+') ``` #### 4.4. Закрытие файла ```py >>> fp.close() >>> ``` #### 4.5 Запись информации в файл с помощью метода `write` ```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() ``` [Созданный файл](zapis3.txt) ```py >>> fp3=open('zapis4.txt','w', encoding="utf-8") >>> 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 gh=open('zapis5.txt','w') for r in sps3: gh.write(f'{r[0]} {str(r[1])}\n') gh.close() ``` [Созданный файл](zapis5.txt) #### 4.6. Первый способ чтения информации из текстового файла. ```py >>> sps1=[] fp=open('zapis3.txt') sps1=[] >>> 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'] ``` #### 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 >>> with open('zapis3.txt') as fl: ... print(fl.readline()) ... print(fl.readlines()) ... [1, 2, 3, 4] ['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] ``` #### 4.9 Ввод-вывод объектов с использованием функций из модуля `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 fp=open('zapis6.mnz','rb') mnoz2=pickle.load(fp) fp.close() >>> mnoz2 {'pen', 'table', 'iPhone', 'book'} >>> mnoz1 {'pen', 'table', 'iPhone', 'book'} >>> mnoz1 == mnoz2 True >>> 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, sps3 ({'iPhone', 'book', 'pen', 'table'}, [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]], [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]) ``` ### 5. Перенаправление потоков ввода и вывода данных ```py >>> import sys >>> vr_out=sys.stdout >>> fc=open('Stroka.txt','w', encoding='utf-8') >>> sys.stdout=fc >>> print('запись строки в файл') >>> sys.stdout=vr_out >>> print('запись строки на экран') запись строки на экран >>> fc.close() >>> tmp_in = sys.stdin >>> fd = open("Stroka.txt", "r") >>> sys.stdin = fd >>> sys.stdin <_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'> >>> fd = open("Stroka.txt", "r", encoding='utf-8') >>> sys.stdin = fd >>> sys.stdin <_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='utf-8'> >>> while True: ... try: ... line = input() ... print(line) ... except EOFError: ... break ... запись строки в файл >>> fd.close() >>> sys.stdin=tmp_in ```