TabolinIA 3 недель назад
Родитель 29ec94ce07
Сommit e22d40ca0a

@ -0,0 +1 @@
запись строки в файл

@ -0,0 +1,350 @@
# Отчёт по Теме 6
Таболин Иван, А-01-23
## 1. Запуск среды IDLE и первоначальная настройка.
```py
import os
os.chdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6")
```
## 2. Вывод данных на экран дисплея.
## 2.1. Вывод в командной строке.
"Эхо-вывод"
```py
stroka='Автоматизированная система управления';stroka
'Автоматизированная система управления'
```
## 2.2. Вывод с использованием `print`.
Вывод сразу нескольких объектов за одно обращение к функции.
```py
fff=234.5;gg='Значение температуры = '
print(gg,fff)
Значение температуры = 234.5
```
По умолчанию выводимые объекты разделяются пробелом, но можно указать разделитель в отдельном аргументе `sep`.
```py
print(gg,fff,sep='/')
Значение температуры = /234.5
```
После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, используется аргумент `end`.
```py
print(gg,fff,sep='/',end='***');print('___')
Значение температуры = /234.5***___
```
С помощью обращения к функции `print` без указания аргументов можно перейти на новую строку.
С помощью тройных кавычек оператор вывода может располагаться на нескольких строках
```py
print("""Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
В первом случае вывод осуществляется на разных строках в соответствии с аргументом функции (аргумент один). А во втором случае у функции три аргумента, разделитель между которыми по умолчанию является пробелом.
## 2.3. Вывод с помощью `write` объекта `sys.stdout`.
```py
import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14
```
Метод `write` объекта `sys.stdout` выводит текст и возвращает количество байтов, записанных в строку.
## 3. Ввод данных с клавиатуры.
```py
psw=input('Введите пароль:')
Введите пароль:12345
psw
'12345'
```
Пример 1. Ввод с контрлем значения.
```py
while True:
znach=float(input('Задайте коэф. усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф. усиления = 15.4
Ошибка!
Задайте коэф. усиления = 21.6
```
Пример 2. Ввод и обработка выражения, подлежащего расчету
```py
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4. Ввод-вывод при работе с файлами.
Модуль `os` был импортирован в начале работы.
```py
os.getcwd()
'C:\\Users\\User\\Desktop\\python-labs\\TEMA6'
Tabolin=os.getcwd();print(Tabolin)
C:\Users\User\Desktop\python-labs\TEMA6
Tabolin
'C:\\Users\\User\\Desktop\\python-labs\\TEMA6'
```
Изучение некоторых методов модуля `os`.
```py
os.mkdir("directory1") # создание папки directory1
os.rmdir("directory1") # удаление папки directiry1
os.listdir() # вывод всех папок рабочего каталога
['.gitkeep', 'report6.md', 'Ris1.png', 'Ris2.png']
import os.path
os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6") # проверяет наличие указанного пути в рабочем каталоге
True
os.path.isdir("C:\\Users\\User\\Desktop\\python-labs")
True
os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6\\report6.md")
False
```
```py
fil=os.path.abspath("oplata.dbf")
print(fil)
C:\Users\User\Desktop\python-labs\TEMA6\oplata.dbf
```
```py
fil=os.path.abspath("report6.md")
print(fil)
C:\Users\User\Desktop\python-labs\TEMA6\report6.md
```
Выделение пути доступа к файлу и имя файла из строки, полученной в результате выполнения метода `os.path.abspath`
```py
drkt=os.path.dirname(fil)
print(drkt)
C:\Users\User\Desktop\python-labs\TEMA6
name=os.path.basename(fil);print(name)
report6.md
```
```py
os.path.split(fil) # создает кортеж с двумя элементами: путь к файлу и название файла
('C:\\Users\\User\\Desktop\\python-labs\\TEMA6', 'report6.md')
type(os.path.split(fil))
<class 'tuple'>
```
```py
os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA6') # проверяет .существует ли путь
True
os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA5')
True
os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA10')
False
os.path.isfile(fil) # проверяет наличие файла с известным расположением
True
```
## 4.2. Общая схема работы с файлом.
Для обмена данными с файлом необходимо выполнить слдующие операции:
открыть файл с указанием его имени и цели (чтение, запись, добавление данных)
выполнить одну или несколько операций обмена данными с файлом
закрыть файл
## 4.3. Открытие файла для записи или чтения данных.
Выполняется с помощью функции `open`.
```py
fp=open(file=drkt+'\\zapis1.txt',mode='w')
```
`fp` - файловый объект, он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя файла.
В качестве аргументов указывается путь и имя, открываемого файла, а также цель использования (`w=write` - для записи).
```py
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']
```
Некоторые значения аргумента `mode`:
w – запись с созданием нового файла или перезапись существующего файла,
w+ - чтение и запись/перезапись файла,
r – только чтение (это значение - по умолчанию),
r+ - чтение и/или запись в существующий файл,
a – запись в конец существующего файла или, если его нет, запись с созданием файла,
a+ - то же, что и в «a», но с возможностью чтения из файла.
Для того, чтобы открыть бинарный файл требуется добавить символ `b` указанным выше значениям аргумента `mode`, например:
```py
fp1=open(drkt+'\\zapis2.bin',mode='wb+')
```
Значение символьного файла `t` указывается по умолчанию, указывать его не требуется.
## 4.4. Закрытие файла.
```py
fp.close()
fp1.close()
```
## 4.5. Запись информации в файл.
Выполняется с поомщью метода `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()
```
```py
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()
```
```py
gh=open('zapis5.txt','w')
for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
```
## 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()
print(sps1)
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
```
```py
sps2=[]
for i in sps1:
sps2.append(int(i))
print(sps2)
[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()
print(stroka1,stroka2,sep='\n')
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
```
## 4.8. Третий способ чтения ифнормации.
С помощью методов `readline` и `readlines`.
`readline` читает одну строку, начиная с положения маркера
`readlines` читает все строки и возвращает список
```py
fp=open('zapis3.txt', 'r')
stroka1=fp.readline();print(stroka1)
[1, 2, 3, 4]
stroka2=fp.readline();print(stroka2)
[5, 6, 7, 8]
fp.close()
fp=open('zapis3.txt','r') # файл открыт заново, для того чтобы вернуть маркер в начало
vse_stroki=fp.readlines();print(vse_stroki)
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
vse_stroki
```
## 4.9. Ввод-вывод объектов.
С использованием функций из модуля `pickle`
```py
import pickle
mnoz1={'pen','book','pen','iPhone','table','book'}
fp=open('zapis6.mnz','wb')
pickle.dump(mnoz1, fp)
fp.close()
```
```py
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp)
fp.close()
print(mnoz2)
{'book', 'pen', 'iPhone', 'table'}
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()
print(obj1,obj2,sep='\n')
{'book', 'pen', 'iPhone', 'table'}
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
## 5. Перенаправление потоков ввода и вывода данных.
```py
import sys
vr_out=sys.stdout # запомнили текущий вывод в переменной
fc=open('Stroka.txt','w')
sys.stdout=fc # перенаправиои вывод в открытый файл
print('запись строки в файл') # вывели строку в файл (на экарне она не отобразилась)
sys.stdout=vr_out # вернули предыдущий вывод
print('запись строки на экран')
запись строки на экран
fc.close()
```
```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.

@ -0,0 +1,92 @@
# Общее контрольное задание по Теме 6
Таболин Иван, А-01-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представ-ленными в виде символьных строк.
2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3. Записывается кортеж в бинарный файл.
4. Записывается в этот же файл список и закрывается файл.
5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообще-ние.
7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
1.
```py
stroka=''
for i in range(125):
stroka+=str(random.randint(6,56))+' '
stroka=stroka[:-1]
kort=tuple(stroka.split(' '));print(kort, len(kort))
('15', '8', '50', '41', '20', '49', '43', '34', '22', '11', '42', '34', '15', '23', '25', '42', '9', '10', '26', '28', '26', '7', '30', '50', '19', '23', '9', '39', '19', '13', '27', '46', '20', '32', '13', '28', '7', '27', '18', '41', '28', '10', '27', '44', '32', '22', '37', '7', '6', '46', '34', '36', '8', '47', '43', '30', '9', '23', '20', '52', '26', '34', '50', '50', '47', '50', '46', '50', '29', '46', '23', '8', '29', '21', '32', '29', '36', '9', '53', '11', '34', '10', '28', '17', '10', '21', '40', '30', '23', '26', '48', '15', '48', '9', '29', '17', '42', '28', '37', '23', '30', '38', '9', '55', '17', '35', '31', '52', '17', '12', '27', '9', '53', '14', '17', '22', '11', '13', '54', '45', '15', '52', '23', '11', '37') 125
```
2.
```py
surnames=['Tabolin','Berezhkov','Krishtul','Stepanischev','Filippov']
print(surnames)
['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev', 'Filippov']
```
3.
```py
import pickle
fb=open('taskb.bin','wb')
pickle.dump(kort, fb)
```
4.
```py
pickle.dump(surnames,fb)
fb.close()
```
5.
```py
fb=open('taskb.bin','rb')
inp1=pickle.load(fb)
inp2=pickle.load(fb)
print(inp1,inp2,sep='\n')
('15', '8', '50', '41', '20', '49', '43', '34', '22', '11', '42', '34', '15', '23', '25', '42', '9', '10', '26', '28', '26', '7', '30', '50', '19', '23', '9', '39', '19', '13', '27', '46', '20', '32', '13', '28', '7', '27', '18', '41', '28', '10', '27', '44', '32', '22', '37', '7', '6', '46', '34', '36', '8', '47', '43', '30', '9', '23', '20', '52', '26', '34', '50', '50', '47', '50', '46', '50', '29', '46', '23', '8', '29', '21', '32', '29', '36', '9', '53', '11', '34', '10', '28', '17', '10', '21', '40', '30', '23', '26', '48', '15', '48', '9', '29', '17', '42', '28', '37', '23', '30', '38', '9', '55', '17', '35', '31', '52', '17', '12', '27', '9', '53', '14', '17', '22', '11', '13', '54', '45', '15', '52', '23', '11', '37')
['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev', 'Filippov']
fb.close()
```
6.
```py
if (inp1==kort) and (inp2==surnames):
print('Вывод в файл и последующее чтение из файла выполнено корректно.')
else:
print('Ошибка!')
Вывод в файл и последующее чтение из файла выполнено корректно.
```
7.
```py
for i in range(125//5):
exec('spis'+str(i)+'='+str(list(inp1[i:i+5])))
for i in range(125//5):
exec('print(spis'+str(i)+')')
['15', '8', '50', '41', '20']
['8', '50', '41', '20', '49']
['50', '41', '20', '49', '43']
['41', '20', '49', '43', '34']
['20', '49', '43', '34', '22']
['49', '43', '34', '22', '11']
['43', '34', '22', '11', '42']
['34', '22', '11', '42', '34']
['22', '11', '42', '34', '15']
['11', '42', '34', '15', '23']
['42', '34', '15', '23', '25']
['34', '15', '23', '25', '42']
['15', '23', '25', '42', '9']
['23', '25', '42', '9', '10']
['25', '42', '9', '10', '26']
['42', '9', '10', '26', '28']
['9', '10', '26', '28', '26']
['10', '26', '28', '26', '7']
['26', '28', '26', '7', '30']
['28', '26', '7', '30', '50']
['26', '7', '30', '50', '19']
['7', '30', '50', '19', '23']
['30', '50', '19', '23', '9']
['50', '19', '23', '9', '39']
['19', '23', '9', '39', '19']
```

Двоичные данные
TEMA6/taskb.bin

Двоичный файл не отображается.

@ -0,0 +1,3 @@
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

@ -0,0 +1 @@
Иванов И. 1Петров П. 2Сидоров С. 3

@ -0,0 +1,3 @@
Иванов И. 1
Петров П. 2
Сидоров С. 3

Двоичные данные
TEMA6/zapis6.mnz

Двоичный файл не отображается.

Двоичные данные
TEMA6/zapis7.2ob

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить