При вводе команд в интерактивном режиме интерпретатор сам показывает значение переменной, если просто написать её имя. Внутри скриптов и функций такой способ не работает, там нужен явный вывод.
```py
>>> stroka = "Автоматизированная система управления"
>>> stroka
'Автоматизированная система управления'
```
#### 2.2. Вывод с использованием функции print.
Самый распространённый способ вывода данных на экран - функция print. Она позволяет вывести несколько значений за один вызов.
```py
>>> fff = 234; gg = "Значение температуры ="
>>> print(gg, fff) # Вывод нескольких объектов через запятую
Значение температуры = 234
```
Через параметр sep можно задать символ (или строку), который будет разделять выводимые элементы.
```py
>>> print(gg, fff, sep = "/") # Вывод объектов с заданным разделителем
Значение температуры =/234
```
Через параметр end можно указать, что выводить в конце строки вместо перехода на новую строку по умолчанию.
```py
>>> print(gg, fff, sep = "/", end = "***"); print("____") # Вывод объектов с указанным окончанием строки
Значение температуры =/234***____
```
Функция print поддерживает вывод многострочных строк, которые можно задавать через тройные кавычки, а также можно выводить длинный текст, разбитый на несколько аргументов.
```py
>>> print("""Здесь может выводиться
... большой текст,
... занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
```
```py
>>> print("Здесь может выводиться",
... "большой текст",
... "занимающий несколько строк")
Здесь может выводиться большой текст занимающий несколько строк
```
#### 2.3. Вывод с использованием метода write объекта sys.stdout.
Стандартный способ вывода данных - через поток вывода stdout, находящийся в модуле sys. В данном методе не происходит автоматический переход на новую строку при последовательном его использовании, поэтому необходимо вручную добавлять символ "\n".
```py
>>> import sys
>>> sys.stdout.write("Функция write") # Вывод строки с помощью метода write
Функция write13 # Число 13 в конце - количество символов в строке
>>> sys.stdout.write("Функция write\n")
Функция write
14
```
### 3. Ввод данных с клавиатуры.
Для ввода данных с клавиатуры используется функция input, ранее изученная.
```py
>>> pws = input("Введите пароль: ")
Введите пароль: 1234567
>>> pws
'1234567'
>>> type(pws)
<class'str'>
```
Ввод значений можно контролировать с помощью циклов и break:
Также с помощью оператора ввода можно вычислять значения математических выражений
```py
>>> import math
>>> print(eval(input("Введите выражение для расчета: ")))
Введите выражение для расчета: math.log10(23 / (1 + math.exp(-3.24)))
1.34504378689765
```
### 4. Ввод-вывод при работе с файлами.
При работе с файлом необходимо указывать источник данных - полное имя файла с путем доступа к его расположению.
#### 4.1. Функции для работы с путём к файлу.
Если файл находится в текущем рабочем каталоге, то для получения полного пути проще сначала получить путь до рабочего каталога. Сделать это можно с помощью функции getcwd модуля os.
```py
>>> import os
>>> os.getcwd() # Отображение текущего рабочего каталога
'/home/s0ba4/mpei/python-labs/TEMA6'
>>> path = os.getcwd()
>>> path
'/home/s0ba4/mpei/python-labs/TEMA6'
```
В этом модуле есть функции, для создания и удалений директорий, а также проверки их наличия.
Также полный путь доступа к файлу можно получить с помощью отдельной функции abspath. Затем из него можно выделить путь к директории, содержащей файл, и имя самого файла с помощью соответствующих функций dirname и basename.
```py
>>> fil = os.path.abspath("oplata.dbf") # Получение полного пути к файлу
>>> fil
'/home/s0ba4/mpei/python-labs/TEMA6\\oplata.dbf'
>>> drkt = os.path.dirname(fil) # Выделение пути доступа к файлу
>>> drkt
'/home/s0ba4/mpei/python-labs/TEMA6'
>>> name = os.path.basename(fil) # Выделение имени файла
>>> name
'oplata.dbf'
>>> directory, fileName = os.path.split(fil) # Одновременное выделение пути доступа к файлу и его имени
>>> directory
'/home/s0ba4/mpei/python-labs/TEMA6'
>>> fileName
'oplata.dbf'
```
Проверка того, указывает ли путь на существующий файл, осуществляется с помощью функции isfile.
```py
>>> os.path.isfile(fil) # Проверка пути к файлу
True
>>> os.path.isfile("ABCDEF.txt")
False
```
#### 4.2. Общая схема работы с файлом.
Для обмена данными с файлом необходимо выполнить следующие операции:
* Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
* Выполнение одной или нескольких операций обмена данными с файлом;
* Закрытие файла.
#### 4.3. Открытие файла для записи и чтения файла.
Для открытия файла используется функция open, в которой необходимо указывать путь и имя открывающегося файла и цель его использования. Имена аргументов в данной функции можно опускать, но тогда сами аргументы должны идти в правильном порядке. Если же файл находится в текущем рабочем каталоге, то полный путь к нему можно не указывать, будет достаточно только его имени.
Различные значения аргумента mode:
* w - запись/перезапись файла
* w+ - чтение и запись/перезапись файла
* r - только чтение существующего файла
* r+ - чтение и/или запись в существующий файл
* a - запись в конец существующего файла
* a+ - запись в конец существующего файла с возможностью чтения
```py
>>> fp = open(file = drkt + "\\zapis1.txt", mode = "w") # Открытие файла с явным указанием пути и цели использования
>>> fp = open(drkt + "\\zapis1.txt", "w") # Открытие файла без указания имен аргументов
>>> fp = open("zapis1.txt", "w") # Открытие файла, путь к которому совпадает с рабочим каталогом
После завершения работы с файлом его необходимо закрывать для обеспечения сохранности его содержимого. Это делается с помощью функции close, применяемой к файловой переменной.
```py
>>> fp.close()
```
#### 4.5. Запись информации в файл.
Стандартный вариант записи в файл - использование метода write.
```py
>>> sps = list(range(1, 13))
>>> sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> fp2 = open("zapis3.txt", "w")
>>> fp2.write(str(sps[:4]) + "\n") # Запись в файл первых 4 значений + переход на новую строку
... sps2 = sps2 + [int(x) for x in stroka.split(",")]
...
>>> fp.close()
>>> sps2
... [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
#### 4.7. Чтение информации с помощью метода read.
Метод read читает содержимое файла как одну строку.
Если указать аргумент (число), будет прочитано только заданное количество символов, а без аргумента метод возвращает весь оставшийся текст файла, начиная с текущей позиции.
```py
>>> fp = open("zapis3.txt")
>>> stroka1 = fp.read(12) # Чтение первых 12 символов
>>> stroka2 = fp.read() # Чтение файла полностью
>>> fp.close()
>>> stroka1
'[1, 2, 3, 4]'
>>> stroka2
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
```
#### 4.8. Чтение информации с помощью методов readline и readlines.
Метод readline считывает одну строку от текущей позиции.
Повторные вызовы readline читают следующие строки файла.
Метод readlines возвращает список всех строк файла, каждая строка представлена отдельным элементом списка.
```py
>>> fp = open("zapis3.txt")
>>> stroka1 = fp.readline() # Чтение первой строки файла
>>> stroka2 = fp.readline() # Чтение второй строки файла
>>> fp.close()
>>> fp = open("zapis3.txt")
>>> stroka3 = fp.readlines() # Чтение всех строк файла