TEMA7 готова
1
TEMA6/Stroka.txt
Обычный файл
@@ -0,0 +1 @@
|
||||
запись строки в файл
|
||||
Двоичные данные
TEMA6/data_file.dat
Обычный файл
Двоичные данные
TEMA6/image.png
Обычный файл
|
После Ширина: | Высота: | Размер: 59 KiB |
Двоичные данные
TEMA6/images/3.1.2.png
Обычный файл
|
После Ширина: | Высота: | Размер: 48 KiB |
Двоичные данные
TEMA6/images/3.1.3.png
Обычный файл
|
После Ширина: | Высота: | Размер: 56 KiB |
Двоичные данные
TEMA6/images/4.1.2.png
Обычный файл
|
После Ширина: | Высота: | Размер: 102 KiB |
Двоичные данные
TEMA6/images/4.1.4.png
Обычный файл
|
После Ширина: | Высота: | Размер: 125 KiB |
Двоичные данные
TEMA6/images/6.1.png
Обычный файл
|
После Ширина: | Высота: | Размер: 8.1 KiB |
Двоичные данные
TEMA6/images/7.1.png
Обычный файл
|
После Ширина: | Высота: | Размер: 59 KiB |
766
TEMA6/report.md
@@ -103,231 +103,673 @@ sys.stdout.write('Функция write\n')
|
||||
Функция write
|
||||
```
|
||||
|
||||
## 2. Цикл по перечислению – управляющая инструкция for.
|
||||
## 2. Ввод данных с клавиатуры.
|
||||
|
||||
***Общее правило написания:***
|
||||
for <Объект-переменная цикла> in <объект>:
|
||||
<отступы><Блок инструкций 1 – тело цикла>
|
||||
[else:
|
||||
< отступы ><Блок инструкций 2 – если в цикле не сработал break>]
|
||||
|
||||
>Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break.
|
||||
Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием.
|
||||
|
||||
### 2.1. Простой цикл.
|
||||
### 2.1. Для ввода используйте уже знакомую функцию input.
|
||||
|
||||
```python
|
||||
temperatura=5
|
||||
for i in range(3,18,3):
|
||||
temperatura+=i
|
||||
print(temperatura)
|
||||
psw=input('Введите пароль:')
|
||||
print(psw)
|
||||
print(type(psw))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
50
|
||||
Введите пароль:123
|
||||
123
|
||||
<class 'str'>
|
||||
```
|
||||
|
||||
### 2.2. Более сложный цикл.
|
||||
### 2.2. Ввод с контролем значения.
|
||||
|
||||
*Пусть вводится число, которое должно находиться в интервале значений от 17.5 до 23.8.*
|
||||
|
||||
```python
|
||||
sps=[2,15,14,8]
|
||||
for k in sps:
|
||||
if len(sps)<=10:sps.append(sps[0])
|
||||
else: break
|
||||
print("После первого цикла:",sps)
|
||||
sps=[2,15,14,8]
|
||||
for k in sps[:]:
|
||||
if len(sps)<=10:sps.append(sps[0])
|
||||
else: break
|
||||
print("После второго цикла:",sps)
|
||||
while True:
|
||||
znach=float(input('Задайте коэф.усиления = '))
|
||||
if znach<17.5 or znach>23.8:
|
||||
print('Ошибка!')
|
||||
else:
|
||||
break
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
После первого цикла: [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
|
||||
После второго цикла: [2, 15, 14, 8, 2, 2, 2, 2]
|
||||
Задайте коэф.усиления = 15.4
|
||||
Ошибка!
|
||||
Задайте коэф.усиления = 21.6
|
||||
```
|
||||
|
||||
>Во втором варианте итерация происходит по неизменяемой копии списка, поэтому цикл выполняется полное количество раз (4 раза), тогда как в первом варианте итерация происходит по изменяемому списку, и цикл завершается досрочно (через break, иначе цикл был бы бесконечным).
|
||||
|
||||
### 2.3. Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране.
|
||||
### 2.3. Ввод и обработка выражения, подлежащего расчету.
|
||||
|
||||
```python
|
||||
import random as rn
|
||||
sps5=[]
|
||||
for i in range(10):
|
||||
sps5.append(rn.randint(1,100))
|
||||
ss=sum(sps5)
|
||||
if ss>500: break
|
||||
else:
|
||||
print(ss)
|
||||
import math
|
||||
print(eval(input('введите выражение для расчета = ')))
|
||||
```
|
||||
|
||||
Ответ программы (1 попытка):
|
||||
Ответ программы:
|
||||
```shell
|
||||
|
||||
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
|
||||
1.34504378689765
|
||||
```
|
||||
|
||||
Ответ программы (2 попытка):
|
||||
```shell
|
||||
484
|
||||
```
|
||||
## 3. Ввод-вывод при работе с файлами.
|
||||
|
||||
Ответ программы (3 попытка):
|
||||
```shell
|
||||
450
|
||||
```
|
||||
***Работа с файлом требует указания источника данных - полного имени файла с путем доступа к его расположению. Обычно наибольшие затруднения вызывает корректная локализация этого пути.***
|
||||
|
||||
Ответ программы (4 попытка):
|
||||
```shell
|
||||
### 3.1. Функции для работы с путем к файлу.
|
||||
|
||||
```
|
||||
|
||||
Ответ программы (5 попытка):
|
||||
```shell
|
||||
359
|
||||
```
|
||||
|
||||
>Объяснение поведения программы:
|
||||
Почему вывод значения ss бывает не всегда:
|
||||
else относится к циклу for, а не к if
|
||||
Блок else выполняется только если цикл завершился нормально (без оператора break). Если срабатывает break, блок else пропускается.
|
||||
|
||||
### 2.4. Пример с символьной строкой.
|
||||
>Эти функции собраны в модуле os. Поэтому при работе с файлами надо импортировать этот модуль командой.Эти функции собраны в модуле os. Поэтому при работе с файлами надо импортировать этот модуль командой
|
||||
import os
|
||||
Как и в других системах, в среде Python в любой момент времени подразумевается некоторый рабочий каталог. Какой рабочий каталог установлен в текущий момент времени? Это можно узнать с помощью функции
|
||||
os.getcwd (cwd = current working directory).
|
||||
os.getcwd()
|
||||
Сохраните этот путь в переменной с именем, совпадающим с вашей фамилией в латинской транскрипции. Отобразите её значение с помощью функции print.
|
||||
|
||||
```python
|
||||
stroka='Это – автоматизированная система'
|
||||
stroka1=""
|
||||
for ss in stroka:
|
||||
stroka1+=" "+ss
|
||||
import os
|
||||
TerekhovFV=os.getcwd()
|
||||
print(TerekhovFV)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs
|
||||
```
|
||||
|
||||
*Изменить расположение рабочего каталога можно обращением к уже многократно применявшейся функции os.chdir, аргументом которой будет символьная строка с указанием пути к каталогу, назначаемому в качестве рабочего.*
|
||||
|
||||
```python
|
||||
import os
|
||||
TerekhovFV=os.getcwd()
|
||||
print(TerekhovFV)
|
||||
os.chdir('/Users/fedorterekhov/Library')
|
||||
print(os.getcwd())
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs
|
||||
/Users/fedorterekhov/Library
|
||||
```
|
||||
|
||||
*Фунция os.mkdir(path) - создает новую директорию:*
|
||||
|
||||
```python
|
||||
import os
|
||||
os.mkdir('TEMA6/test_directory')
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||
|
||||
*Фунция os.rmdir(path) - удаляет пустую директорию:*
|
||||
|
||||
```python
|
||||
import os
|
||||
os.rmdir('TEMA6/test_directory')
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||
|
||||
**rmdir работает только с пустыми директориями! Для удаления непустых директорий нужно использовать shutil.rmtree().**
|
||||
|
||||
*Фунция os.listdir(path) - возвращает список файлов и директорий:*
|
||||
|
||||
```python
|
||||
import os
|
||||
print(os.listdir())
|
||||
print(type(os.listdir()))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
['TEMA4', 'TEMA3', 'TEMA2', 'TEMA5', 'README.md', '.gitignore', 'TEMA9', 'TEMA0', 'TEMA7', 'TEMA6', 'TEMA1', 'TEMA8', '.git']
|
||||
<class 'list'>
|
||||
```
|
||||
|
||||
*Фунция os.path.isdir(path) - проверяет, является ли путь директорией:*
|
||||
|
||||
```python
|
||||
import os
|
||||
print(os.path.isdir('TEMA6/test_directory'))
|
||||
print(os.path.isdir('TEMA6/images'))
|
||||
print(type(os.path.isdir('TEMA6/test_directory')))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
False
|
||||
True
|
||||
<class 'bool'>
|
||||
```
|
||||
|
||||
*С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему:*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
print(fil)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs/report.md
|
||||
```
|
||||
|
||||
*Выделить путь доступа к файлу из строки, содержащей и этот путь, и имя файла можно с помощью функции os.path.dirname:*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(drkt)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs
|
||||
```
|
||||
|
||||
*Выделить имя файла/конечной директории из этой строки с отбрасыванием пути можно с помощью функции os.path.basename:*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.basename(drkt))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
python-labs
|
||||
```
|
||||
|
||||
*Функция os.path.split разделяет путь к файлу или директории на корневую часть пути и имя файла или имя директории. Возвращает кортеж, содержащий два элемента:*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.split(drkt))
|
||||
print(type(os.path.split(drkt)))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
('/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs', 'python-labs')
|
||||
<class 'tuple'>
|
||||
```
|
||||
|
||||
*С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции. Возвращаемое значение: True или False.*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.exists(drkt + "/TEMA6"))
|
||||
print(os.path.exists(drkt + "/TEMA66"))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
True
|
||||
False
|
||||
```
|
||||
|
||||
*Проверьте наличие файла с известным расположением с помощью функции os.path.isfile, аргументом которой должна быть символьная строка с путем и именем интересующего файла. Возвращаемое значение: True или False.*
|
||||
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.isfile(drkt + "/TEMA6/report.md"))
|
||||
print(os.path.isfile(drkt + "/TEMA6/report1.md"))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
True
|
||||
False
|
||||
```
|
||||
|
||||
## 4. Общая схема работы с файлом.
|
||||
|
||||
*Для обмена данными с файлом необходимо выполнить следующие операции:*
|
||||
* Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
|
||||
* Выполнение одной или нескольких операций обмена данными с файлом;
|
||||
* Закрытие файла.
|
||||
|
||||
### 4.1. Открытие файла для записи или чтения данных – функция open.
|
||||
|
||||
*При открытии файла необходимо указать имя файлы (с путем, если он не в рабочем каталоге) и цель работы с ним. Для открытия используется функция open.*
|
||||
|
||||
```python
|
||||
help(open)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
|
||||
```shell
|
||||
Help on built-in function open in module io:
|
||||
|
||||
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
|
||||
Open file and return a stream. Raise OSError upon failure.
|
||||
|
||||
file is either a text or byte string giving the name (and the path
|
||||
if the file isn't in the current working directory) of the file to
|
||||
be opened or an integer file descriptor of the file to be
|
||||
wrapped. (If a file descriptor is given, it is closed when the
|
||||
returned I/O object is closed, unless closefd is set to False.)
|
||||
|
||||
mode is an optional string that specifies the mode in which the file
|
||||
is opened. It defaults to 'r' which means open for reading in text
|
||||
mode. Other common values are 'w' for writing (truncating the file if
|
||||
it already exists), 'x' for creating and writing to a new file, and
|
||||
'a' for appending (which on some Unix systems, means that all writes
|
||||
append to the end of the file regardless of the current seek position).
|
||||
In text mode, if encoding is not specified the encoding used is platform
|
||||
dependent: locale.getpreferredencoding(False) is called to get the
|
||||
current locale encoding. (For reading and writing raw bytes use binary
|
||||
mode and leave encoding unspecified.) The available modes are:
|
||||
|
||||
========= ===============================================================
|
||||
Character Meaning
|
||||
--------- ---------------------------------------------------------------
|
||||
'r' open for reading (default)
|
||||
'w' open for writing, truncating the file first
|
||||
'x' create a new file and open it for writing
|
||||
'a' open for writing, appending to the end of the file if it exists
|
||||
'b' binary mode
|
||||
't' text mode (default)
|
||||
'+' open a disk file for updating (reading and writing)
|
||||
'U' universal newline mode (deprecated)
|
||||
========= ===============================================================
|
||||
|
||||
The default mode is 'rt' (open for reading text). For binary random
|
||||
access, the mode 'w+b' opens and truncates the file to 0 bytes, while
|
||||
'r+b' opens the file without truncation. The 'x' mode implies 'w' and
|
||||
raises an `FileExistsError` if the file already exists.
|
||||
```
|
||||
|
||||
*Откройте файл zapis1.txt для записи данных с помощью инструкции*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w')
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||
|
||||
*Здесь fp – это файловый объект, который в других языках программирования обычно называют файловой переменной. Он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя открытого файла. В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования (w=write – для записи).*
|
||||
|
||||
*Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла:*
|
||||
|
||||
```python
|
||||
fp=open('zapis1.txt','w')
|
||||
```
|
||||
|
||||
*Тип и список атрибутов переменной fp:*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w')
|
||||
print(type(fp))
|
||||
print(dir(fp))
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
<class '_io.TextIOWrapper'>
|
||||
['_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']
|
||||
```
|
||||
|
||||
Если требуются другие операции с открываемым файлом, то для второго аргумента «mode=…» могут быть заданы следующие значения:
|
||||
w – запись с созданием нового файла или перезапись существующего файла,
|
||||
w+ - чтение и запись/перезапись файла,
|
||||
r – только чтение (это значение - по умолчанию),
|
||||
r+ - чтение и/или запись в существующий файл,
|
||||
a – запись в конец существующего файла или, если его нет, запись с созданием файла,
|
||||
a+ - то же, что и в «a», но с возможностью чтения из файла.
|
||||
В зависимости от значения этого аргумента тип создаваемой файловой переменной может быть разным.
|
||||
|
||||
*Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b».*
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp1=open(drkt+'/TEMA6/zapis2.bin',mode='wb+')
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||
|
||||
***В бинарный файл можно без преобразования записывать объекты любого типа.***
|
||||
|
||||
*Если файл – символьный, то его тип обозначается «t», но это – значение по умолчанию и его можно не указывать. В символьный файл можно записывать только объекты типа str. Объекты других типов надо перед записью преобразовать к этому типу.*
|
||||
|
||||
### 4.2. Закрытие файла.
|
||||
|
||||
*Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. Это делается с помощью метода close, применяемого к объекту – файловой переменной.*
|
||||
|
||||
```python
|
||||
fp.close()
|
||||
```
|
||||
|
||||
### 4.3. Запись информации в файл с помощью метода write.
|
||||
|
||||
***Метод write относится к объекту – файловой переменной.***
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps=list(range(1,13))
|
||||
fp=open(file=drkt+'/TEMA6/zapis3.txt',mode='w')
|
||||
fp.write(str(sps[:4])+'\n')
|
||||
fp.write(str(sps[4:8])+'\n')
|
||||
fp.write(str(sps[8:])+'\n')
|
||||
fp.close()
|
||||
```
|
||||
|
||||
Файл zapis3.txt:
|
||||
```
|
||||
[1, 2, 3, 4]
|
||||
[5, 6, 7, 8]
|
||||
[9, 10, 11, 12]
|
||||
|
||||
```
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
fp3=open(drkt + '/TEMA6/zapis4.txt','w')
|
||||
for i in range(len(sps3)):
|
||||
stroka4=sps3[i][0]+' '+str(sps3[i][1])
|
||||
fp3.write(stroka4)
|
||||
fp3.close()
|
||||
```
|
||||
|
||||
Файл zapis4.txt:
|
||||
```
|
||||
Иванов И. 1Петров П. 2Сидоров С. 3
|
||||
```
|
||||
|
||||
```python
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
gh=open(drkt+'/TEMA6/zapis5.txt','w')
|
||||
for r in sps3:
|
||||
gh.write(r[0]+' '+str(r[1])+'\n')
|
||||
gh.close()
|
||||
```
|
||||
|
||||
Файл zapis5.txt:
|
||||
```
|
||||
Иванов И. 1
|
||||
Петров П. 2
|
||||
Сидоров С. 3
|
||||
|
||||
```
|
||||
|
||||
## 5. Способы чтения информации.
|
||||
|
||||
*Информация в текстовом файле размещена последовательно, по строкам, с завершением каждой строки символом ‘\n’ (конец строки). При чтении из файла из него извлекается часть информации, начиная с некоторого символа. Обычно, для удобства, считают, что перед этим символом стоит невидимый маркер (указатель), который при открытии файла устанавливается перед первым символом. После чтения части информации маркер перемещается и ставится перед символом, следующим за прочитанной частью информации.*
|
||||
|
||||
### 5.1. Первый способ чтения.
|
||||
|
||||
```python
|
||||
import os
|
||||
sps1=[]
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
for stroka in fp:
|
||||
stroka=stroka.rstrip('\n')
|
||||
stroka=stroka.replace('[','')
|
||||
stroka=stroka.replace(']','')
|
||||
sps1=sps1+stroka.split(',')
|
||||
fp.close()
|
||||
print(sps1)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
|
||||
```
|
||||
|
||||
*В функции открытия файла использован только один аргумент, остальные – со значениями «по умолчанию».*
|
||||
|
||||
*Перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки, а с помощью метода replace – скобки.*
|
||||
|
||||
*Подумайте, как сделать так, чтобы список, полученный при чтении из файла, совпал с исходным.*
|
||||
|
||||
```python
|
||||
import os
|
||||
sps1=[]
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
for stroka in fp:
|
||||
stroka=stroka.rstrip('\n')
|
||||
stroka=stroka.replace('[','')
|
||||
stroka=stroka.replace(' ','')
|
||||
stroka=stroka.replace(']','')
|
||||
sps1=sps1+stroka.split(',')
|
||||
fp.close()
|
||||
print(sps1)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
|
||||
```
|
||||
|
||||
### 5.2. Чтение информации из файла с помощью метода read.
|
||||
|
||||
*Метод read, как и write, относится к объекту – файловой переменной. В качестве аргумента этого метода может задаваться целое число – количество символов или, если открыт бинарный файл, - количество байт, которое должно быть прочитано, соответственно, из текстового или бинарного файла, начиная с текущего положения маркера. Если указанное число превышает количество оставшихся символов (байт) в файле, то считываются все оставшиеся символы (байты). Если это число не указано, то считываются вся информация от маркера до конца файла. Метод возвращает строку с символами или совокупность байт, прочитанных из файла.*
|
||||
|
||||
```python
|
||||
import os
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
stroka1=fp.read(12)
|
||||
stroka2=fp.read()
|
||||
fp.close()
|
||||
print(stroka1)
|
||||
print(stroka2)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а
|
||||
1, 2, 3, 4]
|
||||
|
||||
[5, 6, 7, 8]
|
||||
[9, 10, 11, 12]
|
||||
|
||||
```
|
||||
|
||||
### 2.5. Запись цикла в строке. Пример: создание списка с синусоидальным сигналом.
|
||||
### 5.3. Чтение информации с помощью методов readline и readlines.
|
||||
|
||||
*Эти методы позволяют прочитать из файла, начиная с текущего положения маркера, соответственно, одну строку символов (совокупность байт) или все строки (все байты).*
|
||||
|
||||
```python
|
||||
import math
|
||||
import pylab
|
||||
|
||||
sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)]
|
||||
|
||||
pylab.plot(sps2)
|
||||
pylab.title('Синусоидальный сигнал')
|
||||
pylab.xlabel('Отсчеты')
|
||||
pylab.ylabel('Амплитуда')
|
||||
pylab.grid(True)
|
||||
pylab.show()
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||
|
||||
## 3. Цикл «пока истинно условие» – управляющая инструкция while.
|
||||
|
||||
***Общее правило написания:***
|
||||
while <Условие>:
|
||||
<отступы><Блок инструкций 1 – тело цикла>
|
||||
[else:
|
||||
<отступы><Блок инструкций 2 – если в цикле не сработал break>]
|
||||
|
||||
>Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или ≠0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия.
|
||||
|
||||
### 3.1. Цикл со счётчиком.
|
||||
|
||||
```python
|
||||
rashod=300
|
||||
while rashod:
|
||||
print("Расход=",rashod)
|
||||
rashod-=50
|
||||
import os
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
stroka1=fp.readline()
|
||||
stroka2=fp.readlines()
|
||||
fp.close()
|
||||
print(stroka1)
|
||||
print(stroka2)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
Расход= 300
|
||||
Расход= 250
|
||||
Расход= 200
|
||||
Расход= 150
|
||||
Расход= 100
|
||||
Расход= 50
|
||||
[1, 2, 3, 4]
|
||||
|
||||
['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
|
||||
```
|
||||
|
||||
Цикл завершился, потому что в Python число 0 интерпретируется как логическое значение False.
|
||||
## 6. Ввод-вывод объектов с использованием функций из модуля pickle.
|
||||
|
||||
### 3.2. Пример с символьной строкой.
|
||||
*В модуле pickle содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти.*
|
||||
|
||||
### 6.1. Запись.
|
||||
|
||||
```python
|
||||
import math
|
||||
stroka='Расчет процесса в объекте регулирования'
|
||||
i=0
|
||||
sps2=[]
|
||||
while i<len(stroka):
|
||||
r=1-2/(1+math.exp(0.1*i))
|
||||
sps2.append(r)
|
||||
print('Значение в момент',i,"=",r)
|
||||
i+=1
|
||||
import os
|
||||
import pickle
|
||||
mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись
|
||||
pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
|
||||
fp.close()
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||

|
||||
|
||||
|
||||
### 3.3. Определение, является ли число простым (делится только на самого себя или 1).
|
||||
### 6.2. Чтение.
|
||||
|
||||
```python
|
||||
# Проверка одного числа
|
||||
chislo = 267
|
||||
kandidat = chislo // 2
|
||||
while kandidat > 1:
|
||||
if chislo % kandidat == 0:
|
||||
print(chislo, ' имеет множитель ', kandidat)
|
||||
break
|
||||
kandidat -= 1
|
||||
else:
|
||||
print(chislo, ' является простым!')
|
||||
|
||||
print("\nПростые числа в диапазоне от 250 до 300:")
|
||||
|
||||
# Проверка всех чисел в диапазоне от 250 до 300
|
||||
for chislo in range(250, 301):
|
||||
kandidat = chislo // 2
|
||||
while kandidat > 1:
|
||||
if chislo % kandidat == 0:
|
||||
break
|
||||
kandidat -= 1
|
||||
else:
|
||||
print(chislo, end=' ')
|
||||
import os
|
||||
import pickle
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
|
||||
mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
|
||||
fp.close()
|
||||
print(mnoz2)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
|
||||
```shell
|
||||
267 имеет множитель 89
|
||||
|
||||
Простые числа в диапазоне от 250 до 300:
|
||||
251 257 263 269 271 277 281 283 293
|
||||
{'iPhone', 'table', 'pen', 'book'}
|
||||
```
|
||||
|
||||
### 3.4. Continue.
|
||||
|
||||
>Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку.
|
||||
|
||||
Пример: Вывод четных чисел от 1 до 10 с использованием continue.
|
||||
**Объясните, почему он не совпадает с тем, что было задано при создании mnoz1. Инструкцией проверьте два объекта: mnoz1 и mnoz2 на совпадение.**
|
||||
|
||||
```python
|
||||
for i in range(1, 11):
|
||||
if i % 2 != 0:
|
||||
continue
|
||||
print(i, end=' ')
|
||||
import os
|
||||
import pickle
|
||||
|
||||
mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись
|
||||
pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
|
||||
fp.close()
|
||||
print(mnoz1)
|
||||
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
|
||||
mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
|
||||
fp.close()
|
||||
print(mnoz2, '\n')
|
||||
|
||||
print(mnoz1==mnoz2)
|
||||
print(mnoz1 is mnoz2)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
|
||||
```shell
|
||||
2 4 6 8 10
|
||||
{'book', 'iPhone', 'table', 'pen'}
|
||||
{'book', 'iPhone', 'table', 'pen'}
|
||||
|
||||
True
|
||||
False
|
||||
```
|
||||
|
||||
**Почему порядок элементов отличается от исходного?**
|
||||
|
||||
* Множество (set) в Python - неупорядоченная коллекция
|
||||
* Элементы хранятся в порядке, оптимизированном для быстрого поиска
|
||||
* Порядок зависит от хэш-значений элементов и может меняться между запусками
|
||||
* Исходный порядок {'pen','book','iPhone','table'} не сохраняется
|
||||
|
||||
**Почему удалились дубликаты?**
|
||||
|
||||
* Множество автоматически удаляет повторяющиеся элементы
|
||||
* Исходно было: {'pen','book','pen','iPhone','table','book'}
|
||||
* Стало: {'pen','book','iPhone','table'} (4 элемента вместо 6)
|
||||
|
||||
**Проверка совпадения:**
|
||||
|
||||
* mnoz1 == mnoz2: True - объекты содержат одинаковые элементы
|
||||
* mnoz1 is mnoz2: False - это разные объекты в памяти
|
||||
|
||||
### 6.3. Запись и чтение.
|
||||
|
||||
*Теперь с использованием тех же функций запишите в файл, а затем прочитайте два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3. При считывании объекты извлекаются из файла в той же последовательности, в которой они в него записывались.*
|
||||
|
||||
```python
|
||||
import os
|
||||
import pickle
|
||||
mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','wb')
|
||||
pickle.dump(mnoz1,fp)
|
||||
pickle.dump(sps3,fp)
|
||||
fp.close()
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','rb')
|
||||
obj1=pickle.load(fp) #Первое обращение к load читает первый объект
|
||||
obj2=pickle.load(fp) #Второе – читает второй
|
||||
fp.close()
|
||||
print(obj1)
|
||||
print(obj2)
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
{'book', 'pen', 'iPhone', 'table'}
|
||||
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
|
||||
```
|
||||
|
||||
## 7. Перенаправление потоков ввода и вывода данных.
|
||||
|
||||
```python
|
||||
import os
|
||||
import sys
|
||||
vr_out=sys.stdout #Запоминаем текущий поток вывода
|
||||
fc=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt','w') #Откроем файл вывода
|
||||
sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
|
||||
print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
|
||||
sys.stdout=vr_out #Восстановление текущего потока
|
||||
print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
|
||||
fc.close()
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||

|
||||
Также на экран выведено сообщение:
|
||||
```shell
|
||||
запись строки на экран
|
||||
```
|
||||
|
||||
*Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла.*
|
||||
|
||||
```python
|
||||
import os
|
||||
import sys
|
||||
tmp_in = sys.stdin #Запоминаем текущий поток ввода
|
||||
fd = open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt', "r") #Открываем файл для ввода (чтения)
|
||||
sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры
|
||||
while True:
|
||||
try:
|
||||
line = input () #Считываем из файла строку
|
||||
print(line) # Отображаем считанное
|
||||
except EOFError:
|
||||
break
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
запись строки в файл
|
||||
```
|
||||
|
||||
|
||||
84
TEMA6/task.md
Обычный файл
@@ -0,0 +1,84 @@
|
||||
# Общее контрольное задание.
|
||||
|
||||
***Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:***
|
||||
* Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
|
||||
* Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
|
||||
* Записывается кортеж в бинарный файл.
|
||||
* Записывается в этот же файл список и закрывается файл.
|
||||
* Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
|
||||
* Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
|
||||
* Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
|
||||
|
||||
```python
|
||||
import random
|
||||
import pickle
|
||||
import os
|
||||
|
||||
# 1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк
|
||||
numbers_tuple = tuple(str(random.randint(6, 56)) for _ in range(125))
|
||||
|
||||
# 2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников
|
||||
surnames_list = ["Терехов", "Жалнин", "Соловьёва", "Лыкова", "Бушманов"]
|
||||
|
||||
# 3. Записывается кортеж в бинарный файл
|
||||
# 4. Записывается в этот же файл список и закрывается файл
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp = open(drkt + '/TEMA6/data_file.dat', 'wb')
|
||||
pickle.dump(numbers_tuple, fp)
|
||||
pickle.dump(surnames_list, fp)
|
||||
fp.close()
|
||||
|
||||
# 5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта
|
||||
fp = open(drkt + '/TEMA6/data_file.dat', 'rb')
|
||||
loaded_tuple = pickle.load(fp)
|
||||
loaded_list = pickle.load(fp)
|
||||
fp.close()
|
||||
|
||||
# 6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение
|
||||
if numbers_tuple == loaded_tuple and surnames_list == loaded_list:
|
||||
print("Объекты совпадают")
|
||||
else:
|
||||
print("Объекты не совпадают")
|
||||
|
||||
# 7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами
|
||||
lists_dict = {}
|
||||
for i in range(0, len(loaded_tuple), 5):
|
||||
chunk = list(loaded_tuple[i:i+5])
|
||||
list_name = f"list_{i//5 + 1}"
|
||||
lists_dict[list_name] = chunk
|
||||
|
||||
# Вывод созданных списков
|
||||
for list_name, chunk in lists_dict.items():
|
||||
print(f"{list_name} = {chunk}")
|
||||
```
|
||||
|
||||
Ответ программы:
|
||||
```shell
|
||||
Объекты совпадают
|
||||
list_1 = ['12', '9', '52', '39', '51']
|
||||
list_2 = ['6', '50', '26', '43', '14']
|
||||
list_3 = ['52', '20', '55', '18', '17']
|
||||
list_4 = ['54', '20', '48', '56', '14']
|
||||
list_5 = ['40', '17', '41', '7', '19']
|
||||
list_6 = ['17', '40', '55', '11', '27']
|
||||
list_7 = ['48', '38', '12', '26', '16']
|
||||
list_8 = ['39', '21', '17', '41', '49']
|
||||
list_9 = ['24', '16', '18', '6', '16']
|
||||
list_10 = ['21', '10', '13', '33', '23']
|
||||
list_11 = ['6', '31', '48', '6', '29']
|
||||
list_12 = ['17', '34', '33', '40', '25']
|
||||
list_13 = ['51', '6', '53', '36', '20']
|
||||
list_14 = ['33', '17', '23', '51', '51']
|
||||
list_15 = ['17', '44', '40', '17', '26']
|
||||
list_16 = ['52', '54', '14', '32', '38']
|
||||
list_17 = ['6', '10', '16', '45', '14']
|
||||
list_18 = ['26', '40', '14', '29', '43']
|
||||
list_19 = ['24', '49', '24', '36', '28']
|
||||
list_20 = ['6', '17', '8', '7', '44']
|
||||
list_21 = ['14', '22', '42', '24', '56']
|
||||
list_22 = ['50', '6', '54', '27', '35']
|
||||
list_23 = ['24', '13', '34', '9', '28']
|
||||
list_24 = ['44', '34', '31', '16', '23']
|
||||
list_25 = ['44', '10', '44', '23', '47']
|
||||
```
|
||||
3
TEMA6/task2.1.py
Обычный файл
@@ -0,0 +1,3 @@
|
||||
psw=input('Введите пароль:')
|
||||
print(psw)
|
||||
print(type(psw))
|
||||
6
TEMA6/task2.2.py
Обычный файл
@@ -0,0 +1,6 @@
|
||||
while True:
|
||||
znach=float(input('Задайте коэф.усиления = '))
|
||||
if znach<17.5 or znach>23.8:
|
||||
print('Ошибка!')
|
||||
else:
|
||||
break
|
||||
2
TEMA6/task2.3.py
Обычный файл
@@ -0,0 +1,2 @@
|
||||
import math
|
||||
print(eval(input('введите выражение для расчета = ')))
|
||||
5
TEMA6/task3.1.1.py
Обычный файл
@@ -0,0 +1,5 @@
|
||||
import os
|
||||
TerekhovFV=os.getcwd()
|
||||
print(TerekhovFV)
|
||||
os.chdir('/Users/fedorterekhov/Library')
|
||||
print(os.getcwd())
|
||||
5
TEMA6/task3.1.10.py
Обычный файл
@@ -0,0 +1,5 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.exists(drkt + "/TEMA6"))
|
||||
print(os.path.exists(drkt + "/TEMA66"))
|
||||
5
TEMA6/task3.1.11.py
Обычный файл
@@ -0,0 +1,5 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.isfile(drkt + "/TEMA6/report.md"))
|
||||
print(os.path.isfile(drkt + "/TEMA6/report1.md"))
|
||||
2
TEMA6/task3.1.2.py
Обычный файл
@@ -0,0 +1,2 @@
|
||||
import os
|
||||
os.mkdir('TEMA6/test_directory')
|
||||
2
TEMA6/task3.1.3.py
Обычный файл
@@ -0,0 +1,2 @@
|
||||
import os
|
||||
os.rmdir('TEMA6/test_directory')
|
||||
3
TEMA6/task3.1.4.py
Обычный файл
@@ -0,0 +1,3 @@
|
||||
import os
|
||||
print(os.listdir())
|
||||
print(type(os.listdir()))
|
||||
4
TEMA6/task3.1.5.py
Обычный файл
@@ -0,0 +1,4 @@
|
||||
import os
|
||||
print(os.path.isdir('TEMA6/test_directory'))
|
||||
print(os.path.isdir('TEMA6/images'))
|
||||
print(type(os.path.isdir('TEMA6/test_directory')))
|
||||
3
TEMA6/task3.1.6.py
Обычный файл
@@ -0,0 +1,3 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
print(fil)
|
||||
4
TEMA6/task3.1.7.py
Обычный файл
@@ -0,0 +1,4 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(drkt)
|
||||
4
TEMA6/task3.1.8.py
Обычный файл
@@ -0,0 +1,4 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.basename(drkt))
|
||||
5
TEMA6/task3.1.9.py
Обычный файл
@@ -0,0 +1,5 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
print(os.path.split(drkt))
|
||||
print(type(os.path.split(drkt)))
|
||||
1
TEMA6/task4.1.1.py
Обычный файл
@@ -0,0 +1 @@
|
||||
help(open)
|
||||
4
TEMA6/task4.1.2.py
Обычный файл
@@ -0,0 +1,4 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w')
|
||||
6
TEMA6/task4.1.3.py
Обычный файл
@@ -0,0 +1,6 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w')
|
||||
print(type(fp))
|
||||
print(dir(fp))
|
||||
4
TEMA6/task4.1.4.py
Обычный файл
@@ -0,0 +1,4 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp1=open(drkt+'/TEMA6/zapis2.bin',mode='wb+')
|
||||
9
TEMA6/task4.3.5.py
Обычный файл
@@ -0,0 +1,9 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps=list(range(1,13))
|
||||
fp=open(file=drkt+'/TEMA6/zapis3.txt',mode='w')
|
||||
fp.write(str(sps[:4])+'\n')
|
||||
fp.write(str(sps[4:8])+'\n')
|
||||
fp.write(str(sps[8:])+'\n')
|
||||
fp.close()
|
||||
9
TEMA6/task4.3.6.py
Обычный файл
@@ -0,0 +1,9 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
fp3=open(drkt + '/TEMA6/zapis4.txt','w')
|
||||
for i in range(len(sps3)):
|
||||
stroka4=sps3[i][0]+' '+str(sps3[i][1])
|
||||
fp3.write(stroka4)
|
||||
fp3.close()
|
||||
8
TEMA6/task4.3.7.py
Обычный файл
@@ -0,0 +1,8 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
gh=open(drkt+'/TEMA6/zapis5.txt','w')
|
||||
for r in sps3:
|
||||
gh.write(r[0]+' '+str(r[1])+'\n')
|
||||
gh.close()
|
||||
7
TEMA6/task4.3.8.py
Обычный файл
@@ -0,0 +1,7 @@
|
||||
import os
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
gh=open(drkt+'/TEMA6/zapis5.txt','w')
|
||||
for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
|
||||
gh.close()
|
||||
11
TEMA6/task5.1.1.py
Обычный файл
@@ -0,0 +1,11 @@
|
||||
import os
|
||||
sps1=[]
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
for stroka in fp:
|
||||
stroka=stroka.rstrip('\n')
|
||||
stroka=stroka.replace('[','')
|
||||
stroka=stroka.replace(']','')
|
||||
sps1=sps1+stroka.split(',')
|
||||
fp.close()
|
||||
print(sps1)
|
||||
12
TEMA6/task5.1.2.py
Обычный файл
@@ -0,0 +1,12 @@
|
||||
import os
|
||||
sps1=[]
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
for stroka in fp:
|
||||
stroka=stroka.rstrip('\n')
|
||||
stroka=stroka.replace('[','')
|
||||
stroka=stroka.replace(' ','')
|
||||
stroka=stroka.replace(']','')
|
||||
sps1=sps1+stroka.split(',')
|
||||
fp.close()
|
||||
print(sps1)
|
||||
8
TEMA6/task5.2.py
Обычный файл
@@ -0,0 +1,8 @@
|
||||
import os
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
stroka1=fp.read(12)
|
||||
stroka2=fp.read()
|
||||
fp.close()
|
||||
print(stroka1)
|
||||
print(stroka2)
|
||||
8
TEMA6/task5.3.py
Обычный файл
@@ -0,0 +1,8 @@
|
||||
import os
|
||||
dirr=os.path.dirname(os.path.abspath("report.md"))
|
||||
fp=open(dirr + '/TEMA6/zapis3.txt')
|
||||
stroka1=fp.readline()
|
||||
stroka2=fp.readlines()
|
||||
fp.close()
|
||||
print(stroka1)
|
||||
print(stroka2)
|
||||
6
TEMA6/task6.1.py
Обычный файл
@@ -0,0 +1,6 @@
|
||||
import os
|
||||
import pickle
|
||||
mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись
|
||||
pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
|
||||
fp.close()
|
||||
6
TEMA6/task6.2.1.py
Обычный файл
@@ -0,0 +1,6 @@
|
||||
import os
|
||||
import pickle
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
|
||||
mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
|
||||
fp.close()
|
||||
print(mnoz2)
|
||||
16
TEMA6/task6.2.2.py
Обычный файл
@@ -0,0 +1,16 @@
|
||||
import os
|
||||
import pickle
|
||||
|
||||
mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись
|
||||
pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
|
||||
fp.close()
|
||||
print(mnoz1)
|
||||
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
|
||||
mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
|
||||
fp.close()
|
||||
print(mnoz2, '\n')
|
||||
|
||||
print(mnoz1==mnoz2)
|
||||
print(mnoz1 is mnoz2)
|
||||
15
TEMA6/task6.3.py
Обычный файл
@@ -0,0 +1,15 @@
|
||||
import os
|
||||
import pickle
|
||||
mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','wb')
|
||||
pickle.dump(mnoz1,fp)
|
||||
pickle.dump(sps3,fp)
|
||||
fp.close()
|
||||
fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','rb')
|
||||
obj1=pickle.load(fp) #Первое обращение к load читает первый объект
|
||||
obj2=pickle.load(fp) #Второе – читает второй
|
||||
fp.close()
|
||||
print(obj1)
|
||||
print(obj2)
|
||||
9
TEMA6/task7.1.py
Обычный файл
@@ -0,0 +1,9 @@
|
||||
import os
|
||||
import sys
|
||||
vr_out=sys.stdout #Запоминаем текущий поток вывода
|
||||
fc=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt','w') #Откроем файл вывода
|
||||
sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
|
||||
print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
|
||||
sys.stdout=vr_out #Восстановление текущего потока
|
||||
print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
|
||||
fc.close()
|
||||
11
TEMA6/task7.2.py
Обычный файл
@@ -0,0 +1,11 @@
|
||||
import os
|
||||
import sys
|
||||
tmp_in = sys.stdin #Запоминаем текущий поток ввода
|
||||
fd = open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt', "r") #Открываем файл для ввода (чтения)
|
||||
sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры
|
||||
while True:
|
||||
try:
|
||||
line = input () #Считываем из файла строку
|
||||
print(line) # Отображаем считанное
|
||||
except EOFError:
|
||||
break
|
||||
41
TEMA6/taskO.py
Обычный файл
@@ -0,0 +1,41 @@
|
||||
import random
|
||||
import pickle
|
||||
import os
|
||||
|
||||
# 1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк
|
||||
numbers_tuple = tuple(str(random.randint(6, 56)) for _ in range(125))
|
||||
|
||||
# 2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников
|
||||
surnames_list = ["Терехов", "Жалнин", "Соловьёва", "Лыкова", "Бушманов"]
|
||||
|
||||
# 3. Записывается кортеж в бинарный файл
|
||||
# 4. Записывается в этот же файл список и закрывается файл
|
||||
fil=os.path.abspath("report.md")
|
||||
drkt=os.path.dirname(fil)
|
||||
fp = open(drkt + '/TEMA6/data_file.dat', 'wb')
|
||||
pickle.dump(numbers_tuple, fp)
|
||||
pickle.dump(surnames_list, fp)
|
||||
fp.close()
|
||||
|
||||
# 5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта
|
||||
fp = open(drkt + '/TEMA6/data_file.dat', 'rb')
|
||||
loaded_tuple = pickle.load(fp)
|
||||
loaded_list = pickle.load(fp)
|
||||
fp.close()
|
||||
|
||||
# 6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение
|
||||
if numbers_tuple == loaded_tuple and surnames_list == loaded_list:
|
||||
print("Объекты совпадают")
|
||||
else:
|
||||
print("Объекты не совпадают")
|
||||
|
||||
# 7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами
|
||||
lists_dict = {}
|
||||
for i in range(0, len(loaded_tuple), 5):
|
||||
chunk = list(loaded_tuple[i:i+5])
|
||||
list_name = f"list_{i//5 + 1}"
|
||||
lists_dict[list_name] = chunk
|
||||
|
||||
# Вывод созданных списков
|
||||
for list_name, chunk in lists_dict.items():
|
||||
print(f"{list_name} = {chunk}")
|
||||
0
TEMA6/zapis1.txt
Обычный файл
0
TEMA6/zapis2.bin
Обычный файл
3
TEMA6/zapis3.txt
Обычный файл
@@ -0,0 +1,3 @@
|
||||
[1, 2, 3, 4]
|
||||
[5, 6, 7, 8]
|
||||
[9, 10, 11, 12]
|
||||
1
TEMA6/zapis4.txt
Обычный файл
@@ -0,0 +1 @@
|
||||
Иванов И. 1Петров П. 2Сидоров С. 3
|
||||
3
TEMA6/zapis5.txt
Обычный файл
@@ -0,0 +1,3 @@
|
||||
Иванов И. 1
|
||||
Петров П. 2
|
||||
Сидоров С. 3
|
||||