Введение
Данная статья является реферативным изложением основной работы. Полный текст научной работы, иллюстрации и иные дополнительные материалы доступны на сайте XXVI Международного конкурса научно-исследовательских и творческих работ учащихся “Старт в науке” по ссылке: https://school-science.ru/26/4/63231.
В данной работе представлен материал по разработке проекта “Работа с файлами на языке программирования Python”. Тема достаточно актуальная и представляет повышенный интерес для учащихся профильных классов, сдающих ЕГЭ по информатике.
Высокоуровневый язык программирования Python 3 предоставляет своим пользователям массу полезных средств для взаимодействия с текстовыми файлами. Встроенные методы платформы позволяют не только создавать документы для хранения строковой информации, но и читать из них данные, а также записывать, удалять и всячески манипулировать их содержимым [1].
Цель данной работы заключается в том, чтобы получить дополнительные теоретические знания по этой теме, провести компьютерный эксперимент и анализ полученных результатов.
Задача состоит в том, чтобы подобрать соответствующий материал с последующей систематизацией, обобщением и иллюстрацией текста.
Работа состоит из двух частей: описательной (рассмотрено несколько режимов работы с файлами) и практической (приведён пример разработки программ (скриптов) с использованием текстовых файлов и соответствующими комментариями. Достаточно подробно расмотрен вариант решения задачи из ЕГЭ по информатике № 27).
Работа с файлами
Создание текстового файла
В настоящее время компьютеры обрабатывают огромные массивы больших данных, ввод таких данных с клавиатуры потребовал бы намного больше времени, чем их обработка. Поэтому в современных языках программирования предусмотрена возможность читать данные из файла и записывать результаты в файл. Один из самых простых форматов файлов — это текстовые файлы, которые хранят только символы из кодовой таблицы. Создавать и просматривать такие файлы можно с помощью программы Блокнот.
При работе с текстовыми файлами изменяется только формат ввода и вывода данных. Алгоритмическая составляющая процесса решения задачи не изменяется. Обычно с помощью программы Блокнот создается файл, содержащий входные данные — те, которые пользователь мог ввести с клавиатуры. По завершении работы программа выводит результат не в консоль, а в файл, который можно открыть в Блокноте. Сохраняются файлы в папке проекта.
Чтобы программа могла работать с файлами, необходимо указать имена этих файлов и определить, для какой цели нужен файл — для ввода или для вывода [5].
Режимы работы с файлами
Python поддерживает множество различных типов файлов, но условно их можно разделить на два виде: текстовые и бинарные. Текстовые файлы – это, к примеру, файлы с расширением cvs, txt, html, в общем любые файлы, которые сохраняют информацию в текстовом виде. Бинарные файлы – это изображения, аудио и видеофайлы и т.д. В зависимости от типа файла работа с ним может немного отличаться.
При работе с файлами необходимо соблюдать некоторую последовательность операций:
1. Открытие файла с помощью метода open()
2. Чтение файла с помощью метода read() или запись файла посредством метода write()
3. Закрытие файла методом close().
Открытие файла для чтения, записи и дозаписи
Чтобы начать работу с файлом, его надо открыть с помощью функции open(), которая имеет следующее формальное определение: open(file, mode).
Первый параметр функции определяет путь к файлу. Путь файла может быть абсолютным, то есть начинается с буквы диска, например, C://somedir/somefile.txt. Либо может быть относительным, например, somedir/somefile.txt - в этом случае поиск файла будет идти относительно расположения запущенного скрипта Python.
Второй передаваемый аргумент - mode устанавливает режим открытия файла в зависимости от того, что мы собираемся с ним делать. Существует 4 общих режима:
· r (Read). Файл открывается для чтения. Если файл не найден, то генерируется исключение FileNotFoundError;
· w (Write). Файл открывается для записи. Если файл отсутствует, то он создается. Если подобный файл уже есть, то он создается заново, и соответственно старые данные в нём стираются;
· a (Append). Файл открывается для дозаписи. Если файл отсутствует, то он создается. Если подобный файл уже есть, то данные записываются в его конец;
· b (Binary). Используется для работы с бинарными файлами. Применяется вместе с другими режимами - w или r, например, rb (чтение бинарных файлов) и wb (запись бинарных файлов).
· r+. Файл открывается одновременно для чтения и записи. Если файл не найден, то генерируется исключение FileNotFoundError;
· w+. Файл открывается одновременно для чтения и записи. Если файл не существует, то он автоматически создается. Если файл существует, то он перезаписывается;
· a+. Файл открывается одновременно для чтения и записи. Если файл не существует, то он автоматически создается. Если файл существует, то данные добавляются в конец файла.
Например, открытие текстового файла на запись: myfile = open(“hello.txt”, “w”).
Например, открытие бинарного файла на чтение: myfile = open(“image.png”, “rb”) [4].
Примечание: Если режим не указан, то по умолчанию — режим чтения (r).
Разработка программ с использованием текстовых файлов
Обработка массивов
Описание формальной модели
В текстовом файле записаны целые числа. Требуется вывести в другой текстовый файл те же числа, но отсортированные в порядке возрастания.
Особенность этой задачи состоит в том, что для сортировки необходимо удерживать в памяти все числа, т. е. для их хранения нужно выделить массив [2].
Компьютерная модель
Входной и выходной текстовые файлы
|
Входные данные (Input.txt) |
Выходные данные (Output.txt) |
|
7 2 10 4 9 6 1 8 5 3 |
1 2 3 4 56 7 8 9 10 |
Сохранить текстовые файлы в отдельную папку.
Скрипт (программа) с двумя файлами
print('Прочитать числа из входного файла Input.txt')
print('найти их сумму и отсортировать по возрастанию')
print('Числа из текстового файла Input.txt: ')
s = 0 #инициализация переменной s
with open('Input.txt', 'r') as f:
n = f.read().splitlines()
print(n) #выдать на экран числа из файла
for i in open('Input.txt'): #Открыть текстовый файл для чтения
s += int(i) #найти сумму всех чисел в файле
print('Сумма всех чисел: s =',s)
print('Перевести данные из файла в массив')
a = [] #объявить массив a
for i in open('Input.txt'):
a.append(int(i)) #файл закрывается автоматически
print("Вывод сформированного массива")
print(a)
print('Отсортировать массив по возрастанию')
for i in open('Input.txt'):
a.sort(reverse = False) #сортировка с помощью модуля sort
print("Вывод отсортированного массива")
print(a)
#данные из массива записать в выходной файл: Output.txt
print('Данные из массива перенести в файл Output.txt')
f = open('Output.txt', 'w') #открыть файл Output.txt для записи
f.write(str(a)) #запись чисел из массива в файл
f.close() #закрыть файл Output.txt
print('Сформированный 2-й файл - Output.txt')
for i in open('Output.txt'):#Открыть файл Output.txt для печати
print(i) #печать сформированного и отсортированного файла
print('Программа завершена')
Сохранить программу в папку вместе с текстовыми файлами.
Компьютерный эксперимент
1. Войти в программную среду Python (Пайтон) – IDLE; выполнить команду [File – New File]; для повторного выполнения – [File – Open].
2. В текстовом редакторе набрать программу (скрипт) с пояснениями – комментариями на русском языке.
3. Запустить программу на выполнение, выполнив команду: [Run – Run Module (F5)].
4. В появившемся окне (рис. 1) нажать на <OK>, далее сохранить файл, указав имя программы и место сохранения (папка с текстовыми файлами):

Рис. 1. Окно для сохранения выполняемого файла
Выполнение в среде разработки Python
Прочитать числа из входного файла Input.txt
найти их сумму и отсортировать по возрастанию
Числа из текстового файла Input.txt:
['7', '2', '10', '4', '9', '6', '1', '8', '5', '3']
Сумма всех чисел: s = 55
Перевести данные из файла в массив
Вывод сформированного массива
[7, 2, 10, 4, 9, 6, 1, 8, 5, 3]
Отсортировать массив по возрастанию
Вывод отсортированного массива
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Данные из массива перенести в файл Output.txt
Сформированный 2-й файл - Output.txt
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Программа завершена
5. Для выхода из среды программирования выполнить команду [File – Exit]; при завершении выполнения файла .exe – нажать на <Enter>.
Запустить проект на выполнение можно, как через среду программирования Python, так и с помощью созданного исполняемого файла с расширением .exe. В отдельной папке находятся текстовые файлы и сохранённый файл .exe.
Обработка строк
Как известно, современные компьютеры большую часть времени заняты обработкой символьной, а не числовой информации [2].
Описание формальной модели
Предположим, что в текстовом файле записаны данные о результатах проведения экзаменов. В каждой строке – Фамилия, предмет и количество полученных баллов. В текстовый файл необходимо добавить строку, удалить необходимую строку и выбрать учащихся, у которых экзаменационный балл равен 10.
Компьютерная модель
Входные и выходные данные
|
Входные данные |
Выходные данные |
|
|
Список учащихся Ильин физика 8 Иванов математика 10 Сидоров информатика 9 Петров физика10 |
Скорректированный файл Иванов математика 10 Сидоров информатика 9 Петров физика 10 Фёдоров информатика 10 |
|
|
Добавить строку Фёдоров информатика 10 |
||
|
Список отобранных учащихся Иванов математика 10 Петров физика10 Фёдоров информатика 10 |
||
|
Удалить 1-ю строку Ильин физика 8 |
Скрипт (программа)
добавить строку, удалить строку и найти максимальные баллы
print('Из текстового файла выбрать учащихся(строки), ')
print('у которых экзаменационный балл равен 10')
print('Список учащихся: ')
for s in open('Input.txt'): #открыть текстовый файл Input.txt
print(s, end = '')
print('Введите дополнительные строки')
with open('input.txt', 'r+') as file:
file.seek(0,2) #переместить курсор в конец файла
while True:
s = input() #ввод строки
if s == '': break #условие выхода из цикла
file.write(s + '\n') #построчная запись строки
with open('input.txt', 'r') as file: #открыть файл для чтения
s = file.readlines()
del s[0] #удалить первую строку с индексом 0
#при удалении строки в файле оставшиеся смещаются вверх
#(индекс переменной становится меньше на 1)
#del s[0], s[2] (3-я после удаления 1-й, т.е. начальная 4-я)
with open('input.txt', 'w') as file: #открыть файл для записи
s = file.writelines(s)
print('Скорректированный файл:')
for i in open('input.txt'): #печать полученного файла
print(i, end = '')
print('Список отобранных учащихся: ')
for s in open('Input.txt'):
#преобразовать строковую переменную в целое число
age = int(s.split()[2])
if age == 10: #условие отбора данных
print(s, end = '') #отобранные строки выдать на экран
print('Программа завершена')
Выполнение в среде разработки Python
Из текстового файла выбрать учащихся(строки),
у которых экзаменационный балл равен 10
Список учащихся:
Ильин физика 8
Иванов математика 10
Сидоров информатика 9
Петров физика 10
Введите дополнительные строки
Фёдоров информатика 10
Скорректированный файл:
Иванов математика 10
Сидоров информатика 9
Петров физика 10
Фёдоров информатика 10
Список отобранных учащихся:
Иванов математика 10
Петров физика 10
Фёдоров информатика 10
Программа завершена
Разбор задания из ЕГЭ № 27
Подготовка к ЕГЭ. Решение задач в среде программирования Python (задание №27)
Учебная литература и интернет-ресурсы:
ЕГЭ. Информатика: Единый государственный экзамен. Готовимся к итоговой аттестации : [Учебное пособие] / В.Р. Лещинер, С.С. Крылов. – Москва. Издательство “Интеллект-Центр”, 2025. – 144 с.
Программное обеспечение:
OS Windows 10
Среда программирования Python 3.8
Задание № 27 является наиболее сложным и трудоёмким заданием КЕГЭ. Оно проверяет умение создавать собственные программы для анализа числовых последовательностей.
Разбор задания № 27
Описание формальной модели
Рассмотрим решение задания № 27 из типовых экзаменационных вариантов ФИПИ. Имеется набор данных, состоящий из 6 пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Определите максимально возможную сумму, соответствующую условиям задачи.
Входной файл содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10000 [3].
Решение:
Изкаждой пары выбирать максимальное число, вычислять сумму выбранных чисел. Если полученная сумма неделится на3, то она иявляется ответом. Если делится, то изнеё нужно вычесть предварительно найденную минимальную разницу вкакой-либо паре, неделящуюся на3. Гарантируется, что решение задачи существует (раньше негарантировалось).
Входные и выходные данные
|
Файл с входными данными: |
Выходные данные: |
|
6 1 6 20 13 20 4 2 4 12 3 13 4 |
73 |
Для проверки алгоритма можно использовать трассировку – “ручная прокрутка”. Для исходного файла запишем в виде таблицы изменения значений всех переменных. После выполнения определённых шагов будет получен результат: s = 75, который необходимо будет скорректировать.
Трассировка алгоритма на данных, взятых из файла
|
№ цикла |
Данные |
a > b max = a min = b |
b > a max = b min = a |
Сумма максимальных чисел s = s + max |
Разница в паре d = max – min d % 3 ! = 0 |
|||
|
a |
b |
s |
d |
|||||
|
1 |
1 |
6 |
0 |
0 |
min = 1 |
max = 6 |
s = 0 + 6 = 6 |
d = 6 – 1 = 5 |
|
2 |
20 |
13 |
6 |
5 |
max = 20 |
min = 13 |
s = 6 + 20 = 26 |
d = 20 - 13 = 7 |
|
3 |
20 |
4 |
26 |
5 |
max = 20 |
min = 4 |
s = 26 + 20 = 46 |
d = 20 - 4 = 16 |
|
4 |
2 |
4 |
46 |
5 |
min = 2 |
max = 4 |
s = 46 + 4 = 50 |
d = 4 - 2 = 2 |
|
5 |
12 |
3 |
50 |
2 |
max = 12 |
min = 3 |
s = 50 + 12 = 62 |
d = 12 – 3 = 9 |
|
6 |
13 |
4 |
62 |
2 |
max = 13 |
min = 4 |
s = 62 + 13 = 75 |
d = 13 – 4 = 9 |
|
|
|
|
75 |
2 |
Выход из цикла |
|||
|
Проверка полученного результата (значение остатка от деления полученной суммы на 3) s % 3 != 0 |
||||||||
|
При s = 75 остаток от деления на 3 равен нулю |
||||||||
|
Скорректировать полученный результат согласно заданному алгоритму: из полученной суммы (s) нужно вычесть предварительно найденную минимальную разницу (d) в какой-либо паре, не делящуюся на 3. В нашем случае d = 4 - 2 = 2. |
||||||||
|
s = s – d; s = 75 - 2 = 73 |
||||||||
|
Ответ: 73 |
||||||||
Компьютерная модель
Решение на языке Python – несколько вариантов:
1-й вариант:
Перебор элементов массива с вычислением какого-либо значения на языке Python можно выполнить одной строкой с помощью генераторов списка.
Программа (скрипт)
print('Найти максимальную сумму')
f = open('input.txt', 'r')
n = int(f.readline()) #количество пар
a = [] #объявить массив a
for i in range(n):
a.append(list(map(int, f.readline().split())))
#максимальное число в паре; сумма выбранных чисел
s = sum([max(x, y) for x, y in a])
ans = s
print('Промежуточная сумма =',ans)
#проверка условия: сумма не делится на 3 и максимально возможная
d = min([abs(x - y) for x, y in a if abs(x - y) % 3 != 0])
if s % 3 == 0:
ans = s - d
print("Максимальная сумма:", ans)
print("Программа завершена!")
Выполнение в среде разработки Python
Найти максимальную сумму
Промежуточная сумма = 6
Промежуточная сумма = 26
Промежуточная сумма = 46
Промежуточная сумма = 50
Промежуточная сумма = 62
Промежуточная сумма = 75
Максимальная сумма: 73
Программа завершена!
2-й вариант:
Это задание можно выполнить, сохранив в массиве все исходные данные, перебрать все возможные способы выбора одного элемента из каждой пары и найти максимальную сумму, соответствующую условиям задачи.
Программа (скрипт)
print('Найти максимальную сумму')
f = open('input.txt', 'r') #открыть текстовый файл для чтения
n = int(f.readline()) #вычислить количество пар
a = [] #объявить массив a
#данные из файла Input.txt записать в массив a
for i1 in range(n):
a.append(list(map(int, f.readline().split())))
#s – сумма выбранных чисел; max – максимум в паре
s = 0; max = 0 #начальные значения переменных s и max
#циклы перебора элементов массива a
for i1 in range(2):
for i2 in range(2):
for i3 in range(2):
for i4 in range(2):
for i5 in range(2):
for i6 in range(2):
#найти сумму элементов (запись в две строки с переносом (\))
s = a[0][i1] + a[1][i2] + a[2][i3] + \
a[3][i4] + a[4][i5] + a[5][i6]
if ((s % 3 != 0) and (s > max)): #условие отбора
max = s
print('max =',max)
print('Максимальная сумма: ', max)
print('Программа завершена! ')
Выполнение в среде разработки Python
Найти максимальную сумму
max = 68
max = 70
max = 73
Максимальная сумма: 73
Программа завершена!
Анализ результатов
В результате проведённого компьютерного эксперимента показаны примеры выполнения программ (скриптов) с использованием открытия текстового файла и записи в него. Рассмотрены варианты работы с массивами и строками. Получены результаты, которые полностью соответствуют результатам тестовых примеров.
Заключение
В ходе разработки проекта получены дополнительные знания по программированию. Проведённый компьютерный эксперимент наглядно показывает практическую значимость проведённых исследований.
Таким образом, рассмотренные варианты программ на языке программирования Python для работы с текстовыми файлами можно использовать на уроках информатики в старших классах инженерного, информационно-технологического, физико-математического и естественно-научного профилей.
Python – современный высокоуровневый профессиональный язык программирования, изучение которого начинается в профильных классах общеобразовательных учреждений (элективные занятия по курсу: “Программирование”) на примере использования не только его основных конструкций, но и работы с текстовыми файлами, что достаточно наглядно показано в данной работе.
Программное обеспечение
1. Операционная система Windows 10
2. Среда программирования Python – 3.8.0
3. Приложение Microsoft Office Word 2016
Библиографическая ссылка
Павлова А.А. РАБОТА С ФАЙЛАМИ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON. РАЗБОР ЗАДАНИЯ ИЗ ЕГЭ // Международный школьный научный вестник. 2025. № 5. ;URL: https://school-herald.ru/ru/article/view?id=1662 (дата обращения: 06.11.2025).
