Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

16 KiB

Отчёт по Теме 6

Ходюк Максим Романович А-01-23

Пункт 1

Запустил стреду IDLE и выставил рабочий каталог:

import os
os.chdir('D:\\POAS\\Hodyuk\\Tema6\\')

Пункт 2

2.1. Вывод в командной строке

stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'

Данный способ вывода называется Эхо-выводом

2.2 Функция print

Пример использования

fff=234.5;gg='Значение температуры = '
print(gg, fff)
Значение температуры =  234.5

Можно изменить разделитель при выводе аргументом sep и символы, оканчивающие вывод с помощью аргумента end

print(gg, fff, sep='/')
Значение температуры = /234.5
print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
print()

Оператор вывода может располагаться на нескольких строках:

print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")

 Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
    "большой текст,",
    "занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк

2.3 Функция write

Импортирую модуль sys и применяю функцию write

import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14

Пункт 3. Функция input (ввод с клавиатуры)

psw=input('Введите пароль:')
Введите пароль: 12345
psw
' 12345'

Пример 1. Ввод с контролем значения

while True:
	znach=float(input('Задайте коэф.усиления = '))
	if znach<17.5 or znach>23.8:
		print('Ошибка!')
	else:
		break

Задайте коэф.усиления = 20
while True:
	znach=float(input('Задайте коэф.усиления = '))
	if znach<17.5 or znach>23.8:
		print('Ошибка!')
	else:
		break

	    
Задайте коэф.усиления = 3
Ошибка!
Задайте коэф.усиления = 5
Ошибка!
Задайте коэф.усиления = 19

Пример 2. Ввод и обработка выражения

import math
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765

Пункт 4.

4.1 Функции для работы с путём к файлу

Модуль os был импортирован ранее, а также выставлен рабочий каталог, поэтому сразу перейду к использованию других функций в этом модуле Использование функции для создания и удаления каталога:

os.mkdir('gg')

На рис.1 представлен скриншот созданного каталога gg Рис 1.

os.rmdir('gg')

На рис. 2 представлен скриншот после выполнения функций удаления каталога Рис 2.

Использовал функцию для выводе всех файлов, находящихся в выбранном каталоге(при пустых аргументах выдаёт содержимое рабочего каталога)

os.listdir()
['photo1.png', 'photo2.png', 'report.md']

Использования функции isdir из модуля os.path (для проверки наличия подкаталога в каталоге)

help(os.path.isdir)
Help on built-in function _path_isdir in module nt:

_path_isdir(s)
    Return true if the pathname refers to an existing directory.

os.mkdir('test_isdir')
os.path.isdir('test_isdir')
True

Пусть в рабочем каталоге находится файл OPLATA.DBF. С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему:

fil=os.path.abspath("oplata.dbf")
fil
'D:\\POAS\\Hodyuk\\Tema6\\oplata.dbf'

fil=os.path.abspath("photo1.png")
fil
'D:\\POAS\\Hodyuk\\Tema6\\photo1.png'

Выделил путь доступа к файлу из строки с помощью следующей функции:

drkt=os.path.dirname(fil)
drkt
'D:\\POAS\\Hodyuk\\Tema6'

Далее выделил имя файла из этой строки

bn=os.path.basename(fil)
bn
'photo1.png'

Самостоятельно применил функцию os.path.split

help(os.path.split)
Help on function split in module ntpath:

split(p)
    Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.

os.path.split(fil)
('D:\\POAS\\Hodyuk\\Tema6', 'photo1.png')

Функция возвращает кортёж из пути доступа к файлу и его имени, отделив их друг от друга

С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции.

os.path.exists(drkt)
True
os.path.exists('D:test\\wrong\\way\\')
False

Проверил наличие файла с известным расположением(если как аргумент задать только имя файла, функция будет искать файл в рабочем каталоге)

os.path.isfile(fil)
True
os.path.isfile(os.path.dirname(fil)+'fil1.txt')
False

4.2 Общая схема работы с файлом

Для обмена данными с файлом необходимо выполнить следующие операции:

• Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);

• Выполнение одной или нескольких операций обмена данными с файлом;

• Закрытие файла.

4.3 Открытие файла для записи или чтения - функция open

Открыл файл zapis1.txt для записи данных

fp=open(file=drkt+'\\zapis1.txt',mode='w')

Проверил наличие открываемого файла:

os.path.isfile(drkt+'\\zapis1.txt')
True

Вообще говоря, аргументы функции с их именами могут располагаться в любом порядке. Если имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать и просто вводить

fp=open(drkt+'\\zapis1.txt','w')

С помощью функции closed проверил, открыт ли файл(соответственно, если функция возвращает True - файл закрыт, а если False - то открыт). Далее буду использовать этот способ для проверки открытия файла

fp.closed
False

Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла:

fp=open('zapis1.txt','w')
fp.closed
False

Отобразил тип и список атрибутов объекта fp

type(fp)
<class '_io.TextIOWrapper'>
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']

Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b».

fp1=open(drkt+'\\zapis2.bin',mode='wb+')
fp1.closed
False

4.4 Закрытие файла

fp.close()
fp.closed
True

4.5 Запись в файл с помощью функции write

Рассмотрел пример создания списка и записи его в файл

sps=list(range(1,13))
sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
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 представлено на рис.3 Рис.3

Следующий пример

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 представлено на рис.4 Рис.4

Легко заметить, что информация записана в файл не очень удачно.

Пробую записать информацию в файл другим способом

gh=open('zapis5.txt','w')
for r in sps3:
		gh.write(r[0]+' '+str(r[1])+'\n')

12
12
13
gh.close()

Содержимое файла zapis5.txt представлено на рис.5 Рис.5

Представил цикл в одной строке:

gh=open('zapis5.txt','w')
for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')

12
12
13
gh.close()

После выполнения цикла содержимое файла такое же, как было

4.6 Чтений информации из текстового файла: Способ Первый

Прочитал информацию из созданного ранее файла zapis3.txt

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']

Здесь, перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки, а с помощью метода replace – скобки. Видно, что полученный список отличается от исходного sps, в первую очередь, типом данных Преобразовать sps1 в sps можно, например, так:

sps2 = [int(i.strip()) for i in sps1]
sps2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

4.7 Чтение с помощью метода read

fp=open('zapis3.txt')
stroka1=fp.read(12)
stroka2=fp.read()
fp.close()
stroka1
'[1, 2, 3, 4]'
stroka2
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'

4.8 Самостоятельно изучил чтение информации с помощью методов readline и readlines

fp=open('zapis3.txt')
stroka3=fp.readline()
stroka3
'[1, 2, 3, 4]\n'
stroka4=fp.readline()
stroka4
'[5, 6, 7, 8]\n'
strokaAll=fp.readlines()
strokaAll
['[9, 10, 11, 12]\n']
fp.close()
fp=open('zapis3.txt')
strokaAll=fp.readlines()
strokaAll
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']

4.9 Ввод-вывод с помощью модуля pickle

Пример этого способа работы с файлами

import pickle
mnoz1={'pen','book','pen','iPhone','table','book'}
fp=open('zapis6.mnz','wb')
fp.closed
False
pickle.dump(mnoz1,fp)
fp.close()

Теперь прочитаю из файла zapis6.mnz

fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp)
fp.close()
mnoz2
{'book', 'pen', 'table', 'iPhone'}
mnoz1 == mnoz2
True

Как можно заметить, визуально файлы отличаются, но проверка на совпадение выдаёт результат True mnoz2 не совпадает с тем, что было задано, потому что это множество. Оно исключает повторяющиеся элементы, оставляя только один, а еще не содержит конкретный порядок элементов. Но два множества равны, если у них равны все элементы и их одинаковое количество, вне зависимости от порядка, так что сравнение возвращает True.

А теперь с использованием тех же функций запишите в файл, а затем прочитайте два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3.

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', 'pen', 'table', 'iPhone'}, [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]])
obj1 == mnoz1
True
obj2 == sps3
True

Убедился в совпадении прочитанных данных с введёнными

Пункт 5. Перенаправление потоков ввода и вывода

Пример 1

vr_out=sys.stdoutmnoz1 
fc=open('Stroka.txt','w')
sys.stdout=fc
print('запись строки в файл')
sys.stdout=vr_out
print('запись строки на экран')
запись строки на экран
fc.close()

В результате получаю файл Stroka.txt со следующим содержанием Рис.6

Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла.

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