DeviatovaMY 1 месяц назад
Родитель 479e946f64
Сommit a84abc4ad3

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

@ -0,0 +1,68 @@
# Общее контрольное задание по теме 6
Девятова Мария, А-03-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3. Записывается кортеж в бинарный файл.
4. Записывается в этот же файл список и закрывается файл.
5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Выполнение
Инструкции для выполнения задания присутствуют в файле [task.py](task.py)
1. Создание кортежа
```
import random
tup1=[]
for i in range(125): tup1.append(str(random.randint(6, 56)))
tup1=tuple(tup1); tup1
('46', '43', '25', '14', '47', '19', '41', '28', '26', '24', '24', '10', '30', '37', '45', '19', '6', '28', '47', '21', '51', '30', '29', '12', '23', '10', '11', '41', '22', '53', '15', '24', '41', '30', '52', '33', '31', '35', '41', '38', '9', '21', '49', '44', '22', '7', '13', '49', '55', '46', '36', '25', '29', '14', '31', '37', '39', '14', '9', '47', '15', '10', '29', '27', '39', '55', '25', '34', '47', '11', '22', '29', '37', '8', '32', '51', '14', '47', '51', '44', '38', '46', '51', '47', '50', '15', '47', '17', '47', '32', '33', '13', '28', '27', '43', '16', '33', '29', '28', '52', '47', '26', '54', '16', '37', '21', '22', '28', '27', '8', '46', '6', '51', '14', '54', '6', '20', '8', '38', '22', '29', '40', '31', '25', '16')
```
2-4. Создание списка, запись кортежа и списка в бинарный файл, чтение обоих объектов из файла
```
sps1=['Девятова', 'Ефимова', 'Беженарь', 'Антонов', 'Гордиевских']
import pickle
fp=open('fil.mnz', 'wb')
pickle.dump(tup1, fp)
pickle.dump(sps1, fp)
fp.close()
fp=open('fil.mnz', 'rb')
tup2=pickle.load(fp)
sps2=pickle.load(fp)
fp.close()
```
5. Проверка на совпадение объектов
```
print('Кортежи совпадают') if tup1 == tup2 else print('Кортежи не совпадают')
Кортежи совпадают
print('Списки совпадают') if sps1 == sps2 else print('Списки не совпадают')
Списки совпадают
```
6. Разделение кортежа на списки по 5 чисел, представленных в строковом виде. Для контроля выведены некоторые из созданных объектов
```
for i in range(0, len(tup1), 5):
exec('spisk' + str(i//5+1) + '=' + str(list(tup1[i:i+5])))
spisk1
['46', '43', '25', '14', '47']
spisk25
['29', '40', '31', '25', '16']
spisk2
['19', '41', '28', '26', '24']
spisk3
['24', '10', '30', '37', '45']
```

@ -0,0 +1,25 @@
import random
tup1=[]
for i in range(125):
tup1.append(str(random.randint(6, 56)))
tup1=tuple(tup1)
print(tup1)
sps1=['Девятова', 'Ефимова', 'Беженарь', 'Антонов', 'Гордиевских']
import pickle
fp=open('fil.mnz', 'wb')
pickle.dump(tup1, fp)
pickle.dump(sps1, fp)
fp.close()
fp=open('fil.mnz', 'rb')
tup2=pickle.load(fp)
sps2=pickle.load(fp)
fp.close()
print('Кортежи совпадают') if tup1 == tup2 else print('Кортежи не совпадают')
print('Списки совпадают') if sps1 == sps2 else print('Списки не совпадают')
for i in range(0, len(tup1), 5):
exec('spisk' + str(i//5+1) + '=' + str(list(tup1[i:i+5])))
Загрузка…
Отмена
Сохранить