Информатика · тема 11 из 13 · ОГЭ № 4, 11 · ЕГЭ № 17

Файловая система, маски и чтение файлов

Как устроено дерево каталогов, как записывать путь к файлу, что означают ? и * в маске и как прочитать числа из файла программой на Python.

14 мин чтенияОГЭЕГЭ17 заданий

Коротко

главное за 30 секунд
  1. Файловая система — дерево: корень (диск), каталоги и файлы; у каждого файла один полный путь
  2. Полный путь: C:\Школа\Физика\задачи.txt; «..» — на уровень вверх, «.» — текущий каталог
  3. Маска: ? — ровно один любой символ; * — любая последовательность символов (в том числе пустая)
  4. Поиск по таблице файлов: проверяйте все условия сразу — расширение, размер, дату
  5. Python: open(имя), read().split() или цикл for line in f; преобразуйте строки в числа функцией int()

Дерево каталогов и путь к файлу

Файлы хранятся в каталогах (папках), а каталоги вложены друг в друга. Начало дерева — корневой каталог диска (C:\). Такая структура называется деревом: у каждого файла ровно один родительский каталог.

Полный путь — цепочка каталогов от корня до файла через обратную косую черту: C:\Школа\Физика\задачи.txt. Имя файла состоит из имени и расширения (после последней точки), например задачи и txt.

Для перемещения используют .. — «подняться на один уровень вверх» (в родительский каталог). Из C:\Школа\Физика путь ..\Химия ведёт в C:\Школа\Химия.

Проверь себя. Вы находитесь в C:\Школа\Физика. Выполните команду «подняться на уровень вверх». В каком каталоге вы окажетесь?

Ответ: C:\Школа

C:\ШколаАрхив9Б10АИнформатикаХимияОтчётыитог.xlsxC:\Архив\Отчёты\итог.xlsx
Рис. 1. Дерево каталогов: у каждого файла один родительский каталог; путь — от корня через «\»
стартC:\Школа\9Б\Информатика.. (вверх)C:\Школа\9Бвниз: ФизикаC:\Школа\9Б\Физика.. (вверх)C:\Школа\9Бвниз: Химия, ОпытыC:\Школа\9Б\Химия\Опыты
Рис. 2. Как менять путь: «..» — вверх на уровень, имя каталога — вниз

Маски файлов

Маска — шаблон имени файла. Два спецсимвола:

? — ровно один любой символ.
* — любая последовательность символов, в том числе пустая.
МаскаПодходятНе подходят
d?ta.txtdata.txt, dota.txtdta.txt, date.txt
*.txta.txt, abc.txt, .txta.text, a.tx
photo?.jpgphoto1.jpgphoto.jpg, photo12.jpg
Ловушка. Звёздочка может заменять и пустую строку: маске data*.txt соответствует файл data.txt. А вот ? пустой строкой быть не может.
?a*.t?tdata.txt✓d + a + «ta» + .t + x + tdate.txt✓d + a + «te» + .t + x + tdata2.txt✓звёздочка = «ta2»dat.tt✗нет символа между «t» и «t»data.text✗расширение из 4 символов
Рис. 3. Маска ?a*.t?t: один любой символ, затем «a», любая часть, «.t», один любой символ, «t»

Поиск файлов по признакам

В заданиях типа ОГЭ-11 файлы описаны таблицей (имя, размер, дата). Нужно применить условие: расширение, размер, год. Читайте условие внимательно: «.doc» — это не «.docx».

Пример. Файлы: report.doc (250 Кб), letter.doc (90 Кб), plan.docx (300 Кб), draft.doc (410 Кб). Условие «расширение .doc и размер > 200 Кб» выберет report.doc и draft.doc — всего 2. plan.docx отсеивается по расширению, letter.doc — по размеру.

Условия «и» проверяют одновременно — файл должен пройти оба. Условия «или» дают объединение множеств.

Чтение файла в Python (ЕГЭ-17 и другие)

В ЕГЭ данные часто лежат в текстовых файлах: числа через пробел или по одному в строке. Стандартный шаблон:

# все числа из файла в список
with open('data.txt') as f:
    nums = [int(x) for x in f.read().split()]
print(max(nums), len(nums))

# построчная обработка: в строке два числа
s = 0
for line in open('data.txt'):
    a, b = map(int, line.split())
    if a > b:
        s += a - b
print(s)
f.read() — весь файл одной строкой; split() разрезает по пробелам и переводам строк; int превращает текст в число; цикл for line in f идёт по строкам.
Проверь себя. Файл data.txt содержит числа 4 17 9 12 3. Какое число выведет print(max(nums)) после чтения по шаблону выше?

Ответ: 17

файлdata.txtread()"4 17 9"split()["4","17","9"]int[4, 17, 9]max()17
Рис. 4. Цепочка чтения числового файла в Python: текст → слова → числа → результат
Практика

Закрепите тему: 17 заданий для ОГЭ и ЕГЭ

От простых к сложным: базовый уровень — 6, повышенный — 9, высокий — 2. Мгновенная проверка, подсказки, подробные решения и тренажёр ошибок.

Решать задания по теме Флеш-карточки