BerezhkovDA 3 недель назад
Родитель 4577395944
Сommit b3c79a545d

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

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

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

@ -0,0 +1,358 @@
# Отчет по теме 6
Бережков Дмитрий, А-01-23
## 1.Начало работы, настройка текущего каталога
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6')
```
## 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
```
Если курсор надо оставить в той же строке, то следует использовать еще один аргумент:
```py
>>> print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
```
Если в какой-то момент требуется просто перейти на новую строку, можно использовать следующее обращение к функции:
```py
>>> print()
```
```py
>>> print(""" Здесь может выводиться
... большой текст,
... занимающий несколько строк""")
...
Здесь может выводиться
большой текст,
занимающий несколько строк
>>> print("Здесь может выводиться",
... "большой текст,",
... "занимающий несколько строк")
...
Здесь может выводиться большой текст, занимающий несколько строк
```
Разница в двух случаях состоит в том, что в первом случае тройные кавычки воспроизводят текст ровно так, как он был введен. Во втором случае три выводимых объекта-строки перечислены через запятую и выведены как три объекта, разделённые пробелом.
2.3 Вывод с использованием метода write объекта sys.stdout
```py
>>> import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
## 3.Ввод данных с клавиатуры
```py
>>> psw=input('Введите пароль:')
Введите пароль:12345
>>> psw
'12345'
>>> type(psw)
<class 'str'>
```
input() всегда возвращает строку.
Пример 1: Ввод с контролем значения.
```py
>>> while True:
... znach=float(input('Задайте коэф.усиления = '))
... if znach<17.5 or znach>23.8:
... print('Ошибка!')
... else:
... break
...
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
>>> znach
21.6
```
Пример 2: Ввод и обработка выражения, подлежащего расчету.
```py
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4. Ввод-вывод при работе с файлами
4.1 Функции для работы с путём к файлу
```py
>>> import os
>>> os.getcwd()
'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6'
>>> Berezhkov=os.getcwd()
>>> print(Berezhkov)
C:\MPEI\PO_ASY\BerezhkovGit\python-labs\Tema6
os
>>> os.mkdir("newp") #создание директории newp в текущей папке
>>> os.rmdir("newp") #Удаление newp
>>> os.listdir() # функция показа всех файлов и папок
['.gitkeep', 'report.md']
>>> os.path.isdir("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6")
...
True
```
>>> fil=os.path.abspath("oplata.dbf") #получение имя файла вместе с полным путем доступа к нему
...
>>> drkt=os.path.dirname(fil)3 Выделение пути доступа к файлу из строки, содержащей и этот путь, и имя файла
...
>>> drkt
...
'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6'
>>> drkt1=os.path.basename(drkt=os.path.dirname(fil))
...
>>> drkt1=os.path.basename(os.path.abspath("oplata.dbf"))
...
>>> drkt1
...
'oplata.dbf'
>>> os.path.split(os.path.abspath("oplata.dbf"))# Функция разделения на кортеж из пути и из имени файла
...
('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6', 'oplata.dbf')
>>> type(os.path.split(os.path.abspath("oplata.dbf")))
...
<class 'tuple'>
>>> os.path.exists("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6")
...
True
>>> os.path.isfile("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\OPLATA.DBF")# Функция проверки существования каталога
...
True
>>> os.path.isfile("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6")
...
False
```
4.2 Общая схема работы с файлом
Для обмена данными с файлом необходимо выполнить следующие операции: Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); Выполнение одной или нескольких операций обмена данными с файлом; Закрытие файла.
4.3 Открытие файла для записи или чтения данных - функция open.
```py
>>> fp=open(file=drkt+'\\zapis1.txt',mode='w')
...
>>> fp
...
<_io.TextIOWrapper name='C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\zapis1.txt' mode='w' encoding='cp1251'>
>>> fp=open(drkt+'\\zapis1.txt','w')
...
>>> fp=open('zapis1.txt','w')#Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла
...
>>> fp
...
<_io.TextIOWrapper name='zapis1.txt' mode='w' encoding='cp1251'>
>>> 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']
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
>>> fp1
<_io.BufferedRandom name='C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\zapis2.bin'>
```
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')
...
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] В файл записались преобразованные в строки срезы списка.
```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()
```
Содержание файла zapis4.txt: Иванов И. 1Петров П. 2Сидоров С. 3
Видно, что строки склеились там. можно сделать по-другому:
```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()
...
>>> 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]
```
Видно, что полученный список отличается от исходного sps типом данных, а также не убраны некоторые пробелы. Исправим это:
```py
>>> sps2 = [int(i.strip()) for i in sps1]
...
>>> 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) # Чтение первых 12 файлов, курсор остановится на 13-ом (/n)
...
>>> 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
```py
>>> file = open("zapis5.txt")
...
>>> file.readline()
...
'Иванов И. 1\n'
>>> file.close()
...
>>> file = open("zapis5.txt")
...
>>> file.readlines()
...
['Иванов И. 1\n', 'Петров П. 2\n', 'Сидоров С. 3\n']
>>> file.close()
```
4.9 Ввод-вывод объектов с использованием функций из модуля pickle
```py
import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
>>> pickle.dump(mnoz1,fp) # dump – метод записи объекта в файл
>>> fp.close()
```
Содержание файла zapis6.mnz: 耄锣 鐨谆楐桯湥钌Ͱ敮钌Ѣ潯殔谅瑡扬斔逮
Так происходит, потому что байты в этом файле не предназначены для текстового представления. Они могут содержать символы, которые не могут быть корректно интерпретированы в рамках текстовой кодировки.
```py
>>> fp=open('zapis6.mnz','rb')
>>> mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
>>> fp.close()
>>> mnoz2
{'table', 'pen', 'iPhone', 'book'}
>>> mnoz1
{'table', 'pen', 'iPhone', 'book'}
>>> mnoz1==mnoz2
True
```
mnoz1 не совпадает с изначально заданным mnoz1, потому что данный тип объекта исключает повторяющиеся элементы.
```py
>>> fp=open('zapis7.2ob','wb')
>>> pickle.dump(mnoz1,fp)
>>> pickle.dump(sps3,fp)
>>> fp.close()
>>> fp=open('zapis7.2ob','rb')
>>> obj1=pickle.load(fp) #Первое обращение к load читает первый объект
>>> obj2=pickle.load(fp) #Второе – читает второй
>>> fp.close()
>>> obj1
{'table', 'pen', 'iPhone', 'book'}
>>> obj2
[['Иванов И.', 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()
```
В результате создан файл Stroka.txt в текущем каталоге с содержанием: 'запись строки в файл'
Можно перенаправить поток ввода – 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: # Если возникла конкретная ошибка EOFError
... break
...
...
запись строки в файл
fd.close()
sys.stdin=tmp_in # Возвращение стандартного назначения для потока ввода
```

@ -0,0 +1,65 @@
# Общее контрольное задание по теме 6
Бережков Дмитрий А-01-23
## Задание:
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1 Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
2 Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3 Записывается кортеж в бинарный файл.
4 Записывается в этот же файл список и закрывается файл.
5 Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6 Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
7 Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение:
1.
```py
>>> import random
>>> tpl= tuple(str(random.randint(6, 56)) for x in range(125))
>>> tpl
('10', '26', '16', '38', '30', '23', '44', '19', '42', '33', '8', '41', '24', '50', '50', '54', '49', '52', '21', '36', '14', '14', '19', '33', '55', '41', '35', '11', '17', '34', '48', '52', '23', '8', '48', '27', '43', '7', '48', '7', '34', '16', '6', '56', '47', '53', '48', '28', '52', '39', '32', '42', '47', '48', '13', '37', '51', '30', '56', '16', '50', '24', '40', '45', '55', '30', '34', '6', '48', '36', '23', '52', '47', '43', '55', '42', '43', '12', '13', '6', '36', '43', '38', '39', '26', '21', '20', '8', '39', '27', '43', '53', '55', '16', '41', '47', '30', '55', '15', '55', '54', '51', '18', '16', '21', '47', '14', '45', '22', '41', '28', '46', '51', '31', '44', '45', '38', '22', '44', '55', '41', '25', '45', '30', '26')
```
2.
```py
>>> spis=["Filippov", "Tabolin", "Berezhkov", "Goloshapov", "Krishtul"]
>>> spis
['Filippov', 'Tabolin', 'Berezhkov', 'Goloshapov', 'Krishtul']
```
3.
```py
>>> fp = open("Zadanie.bin", "wb")
>>> pickle.dump(tpl, fp)
```
4.
```py
>>> pickle.dump(spis, fp)
>>> fp.close()
```
5.
```py
>>> fp = open("Zadanie.bin", "rb")
>>> obj1=pickle.load(fp)
>>> obj2=pickle.load(fp)
>>> obj1
('10', '26', '16', '38', '30', '23', '44', '19', '42', '33', '8', '41', '24', '50', '50', '54', '49', '52', '21', '36', '14', '14', '19', '33', '55', '41', '35', '11', '17', '34', '48', '52', '23', '8', '48', '27', '43', '7', '48', '7', '34', '16', '6', '56', '47', '53', '48', '28', '52', '39', '32', '42', '47', '48', '13', '37', '51', '30', '56', '16', '50', '24', '40', '45', '55', '30', '34', '6', '48', '36', '23', '52', '47', '43', '55', '42', '43', '12', '13', '6', '36', '43', '38', '39', '26', '21', '20', '8', '39', '27', '43', '53', '55', '16', '41', '47', '30', '55', '15', '55', '54', '51', '18', '16', '21', '47', '14', '45', '22', '41', '28', '46', '51', '31', '44', '45', '38', '22', '44', '55', '41', '25', '45', '30', '26')
>>> obj2
['Filippov', 'Tabolin', 'Berezhkov', 'Goloshapov', 'Krishtul']
```
6.
```py
>>> print("obj1 и tpl совпадают") if obj1 == tpl else print("Переменные не совпадают")
obj1 и tpl совпадают
>>> print("obj2 и spis совпадают") if obj2 == spis else print("Переменные не совпадают")
obj2 и spis совпадают
```
7.
```py
>>> for i in range(125//5):
... exec('list' + str(i) + '=' + str(list(obj1[i:i+5])))
...
...
>>> list1
['26', '16', '38', '30', '23']
>>> list2
['16', '38', '30', '23', '44']
>>> list3
['38', '30', '23', '44', '19']
```

@ -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

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