Files
python-labs/TEMA6/report.md
2026-03-01 19:44:08 +03:00

18 KiB

Отчет по теме 6

Филиппова Евгения, А-01-23

Тема 6. Ввод-вывод данных и операции с файлами.

1. Запуск интерактивной оболочки IDLE.

2. Вывод данных на экран дисплея.

2.1. Вывод в командной строке.

В командной строке интерпретатора содержимое объекта можно увидеть упоминанием его в командной строке (эхо-вывод):

stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'

2.2.

Вывод с использованием функции print(), по умолчанию объекты разделяются пробелом:

fff=234.5;gg='Значение температуры = '

print(gg, fff)
Значение температуры =  234.5

Разделитель можно указать в отдельном аргументе sep, случай с /:

print(gg, fff, sep='/')
Значение температуры = /234.5

После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, то следует использовать еще один аргумент:

print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____

Чтобы просто перейти на новую строку:

print()

Также оператор вывода может распологаться на нескольких строках с использованием тройных кавычек:

print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")

 Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
      "большой текст,",
      "занимающий несколько строк")

Здесь может выводиться большой текст, занимающий несколько строк

Различие:

  1. Всё, что написано внутри тройных кавычек, сохраняется «как есть» — включая отступы и переносы.
  2. Это три отдельные строки, переданные как три аргумента функции print(). По умолчанию print() соединяет аргументы через один пробел (sep=' ').

2.3. Вывод с использованием метода write объекта sys.stdout.

sys.stdout — это стандартный поток вывода в Python.

sys.stdout.write - метод вывода в консоль без добавления новой строки и подсчета символов.

import sys
sys.stdout.write('Функция write')
Функция write13

sys.stdout.write('Функция write\n')
Функция write
14

3. Ввод данных с клавиатуры.

С использованием функции input:

psw=input('Введите пароль:')
Введите пароль:hi

psw
'hi'

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. eval() - функция принимает в качестве аргумента строку, выполняет ее как выражение и возвращает результат.

import math
print(eval(input('введите выражение для расчета =')))
введите выражение для расчета =math.log10(23/(1+math.exp(-3.24)))
1.34504378689765

4. Ввод-вывод при работе с файлами.

4.1. Функции для работы с путем к файлу.

Эти функции собраны в модуле os. Чтобы узнать какой рабочий каталог установлен в текущий момент времени - функция os.getcwd() (cwd = current working directory).

import os
os.getcwd() #узнать текущий рабочий каталог
'C:\\Users\\filip\\AppData\\Local\\Programs\\Python\\Python313'

Filippova=os.getcwd() #сохраняем путь в переменной
print(Filippova)
C:\Users\filip\AppData\Local\Programs\Python\Python313

#меняем рабочий каталог
#r - сырая строка, чтобы без \\
os.chdir(r'C:\Users\filip\Desktop\python-labs\TEMA6')

print(os.getcwd())
C:\Users\filip\Desktop\python-labs\TEMA6

Самостоятельное изучение функций из модуля os: mkdir,rmdir, listdir; и функцию isdir из модуля os.path.

mkdir() - функция для создания нового каталога (папки)

os.mkdir('новая папка')

os.rmdir() - функция для удаление пустой папки;

os.rmdir('новая папка')

os.listdir() - функция для просмотра указанного (или рабочего при пустых скобках) каталога;

os.listdir()
['.gitkeep', 'protokol.py', 'report.md', 'zapis1.txt']

os.path.isdir() - проверка, является ли путь папкой (директорией).

print(os.path.isdir(r'C:\Users\filip\Desktop\python-labs\TEMA6'))

True

Проверяю, находится ли определенный файл в рабочем каталоге с помощью функции os.path.abspath:

fil=os.path.abspath("oplata.dbf")
#выведет символьную строку с именем файла и путем доступа к нему
print(fil)
C:\Users\filip\Desktop\python-labs\TEMA6\oplata.dbf

Изучение функций os.path.dirname, os.path.basename, os.path.split, os.path.exists:

#выделяем путь к файлу из строки без имени самого файла
drkt = os.path.dirname(fil)
print(drkt)
C:\Users\filip\Desktop\python-labs\TEMA6

#выделяем только имя файла
fname=os.path.basename(fil)
print(fname)
oplata.dbf

path_parts = os.path.split(fil)
print(path_parts)
#вернет путь и имя в виде кортежа
('C:\\Users\\filip\\Desktop\\python-labs\\TEMA6', 'oplata.dbf')

#проверка, существует ли указанный путь 
print(os.path.exists(fil))      
True

f=r'C:\Users\filip\Desktop\python-labs\TEMA10'   
print(os.path.exists(f))
False

Проверка наличия файла с известным расположением с помощью функции os.path.isfile:

#аргумент функции - символьная строка с путем и именем нужного файла
print(os.path.isfile(fil))
True

print(os.path.isfile(r'C:\Users\filip\Desktop\python-labs\TEMA6\новый'))    
False

print(os.path.isfile(fil+'\fil1.txt'))    
False

4.2. Схема работы с файлом.

Для обмена данными с файлом необходимо выполнить следующие операции:

  1. Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
  2. Выполнение одной или нескольких операций обмена данными с файлом;
  3. Закрытие файла.

4.3. Открытие файла для записи или чтения данных. Функция open.

fp - файловый объект (переменная), сохраняет ссылку на открываемый файл. Аргументы - путь и имя файла, mode - цель использования. w – запись с созданием нового файла или перезапись существующего файла, w+ - чтение и запись/перезапись файла, r – только чтение (это значение - по умолчанию), r+ - чтение и/или запись в существующий файл, a – запись в конец существующего файла или, если его нет, запись с созданием файла, a+ - то же, что и в «a», но с возможностью чтения из файла.

fp=open(file=drkt+'\\zapis1.txt',mode='w')
#можно не указывать имена аргументов, если их порядок, как на примерах 
fp=open(file=drkt+'\\zapis1.txt',mode='w')
#если путь совпадает с рабочим каталогом, то можно писать только имя открываемого файла
fp=open('zapis1.txt','w')

Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b».

fp1=open(drkt+'\\zapis2.bin',mode='wb+')

'wb+' - запись + чтение (write + read) в бинарном режиме.

4.4 Закрытие файла.

Файл следует закрыть сразу после завершения работы:

fp.close()

4.5 Метод write - запись в файл.

Этот метод относится к объекту. Список с элементами-числами от 1 до 12:

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()

Элементы списка sps разделены на 3 группы по 4 элемента и записаны в файл zapis3.txt построчно. Получилось 3 строки Следующий пример:

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()

Информация записана не очень удачно, попытка выполнить по другому:

gh=open('zapis5.txt','w')
for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()

4.6 Первый способ чтения информации из текстового файла.

Пример:

fp=open('zapis3.txt')
for stroka in fp:
    stroka=stroka.rstrip('\n') #rstrip - удаляет перенос в правом конце строки
    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, списка использованного для создания zapis3.txt. Чтобы они совпали:

fp=open('zapis3.txt')
sps1=[]
for stroka in fp:
    stroka=stroka.strip('\n[]') #strip удаляем с двух сторон строки скобки и перенос
    chisla=stroka.split(', ') #split на основе указанного разделителя делит строку на несколько частей и возвращает результат в виде списка
    for chislo in chisla:
        sps1.append(int(chislo))
        
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]

Совпали!

4.7 Чтение информации из файла в виде с помощью метода read.

Этот метод также, как и предыдущий относится к объекту. Аргументом может быть количество символов или количество байт, которое должно быть прочитано из файла, начиная с текущего положения маркера. По умолчанию считывается вся информация от маркера и до конца файла. Метод возвращает строку с символами или байты, прочитанные из файла.

fp=open('zapis3.txt')
stroka1=fp.read(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 - возвращает строку из файла, в конце которой есть завершающая \n. Принимает параметр size (необязательно) - кол-во символов, которые нужно прочитать из строки. По умолчанию size=1. при достижении конца файла возвращает пустую строку, что позволяет программе определить, что можно завершить чтение.

fp=open('zapis3.txt','r')

line1=fp.readline()
print(repr(line1)) #repr - возвращает строковое представление объекта, чтобы посмотреть как он выглядит "внутри".
'[1, 2, 3, 4]\n'

line2=fp.readline()
print(repr(line2))
'[5, 6, 7, 8]\n'

line3=fp.readline()
print(repr(line3))
'[9, 10, 11, 12]\n'

fp.close()

readlines - возвращает список строк! rerp() не требуется.

fp=open('zapis3.txt')
all_lines=fp.readlines()
print(all_lines)
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']

4.9 Ввод-вывод объектов с использованием функций из модуля pickle.

В данном модуле содержатся функции для работы с бинарными файлами. В бинарные файлы могут записываться или считываться целиком 1 или несколько объектов из оперативной памяти. Пример:

import pickle
mnoz1={'pen','book','pen','iPhone','table','book'} #объект типа множество
fp=open('zapis6.mnz','wb') #запись бинарного файла
pickle.dump(mnoz1,fp) #метод модуля, который сохраняет/сериализирует/записывает объект в файл
fp.close()

fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp) #метод чтения объекта из бинарного файла.
fp.close()
mnoz2
{'book', 'table', 'pen', 'iPhone'}
mnoz1
{'iPhone', 'table', 'pen', 'book'}
print(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()
obj1
{'book', 'table', 'pen', 'iPhone'} #соответствует 1 объекту
obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] #соответствует 2 объекту

Перенаправление потоков ввода и вывода данных.

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 – вместо клавиатуры – из файла.

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.