graph TD
folder["📁 Скрипты<br>(текущий рабочий каталог)"]
script([🐍 script.py])
file([📋verse.txt])
folder-->script
folder-->file
Файлы можно разбить на два вида:
Plaintext (текстовые) файлы – содержат информацию, которая понятна человеку;
Бинарные файлы – файлы, открыв которые в текстовом редакторе, человек не сможет понять содержимого (исполняемые файлы, изображения, документы и др.).
В заданиях будем использовать только текстовые файлы.
Чтобы открыть файл используется функция open(<путь>, <режим доступа>).
Эта функция возвращает файловый объект, который будет связан с файлом в файловой системе.
<путь> - это строка с расположением файла, <режим доступа> - строка с режимом в котором мы открываем файл:
чтение "r"
запись "w".
В следующем коде переменная file_obj будет содержать ссылку на файл с именем verse.txt, открытый для чтения:
Файл verse.txt должен находиться в той же папке, что и Python-скрипт. Папка из которой запускается скрипт считается для него текущим рабочим каталогом.
graph TD
folder["📁 Скрипты<br>(текущий рабочий каталог)"]
script([🐍 script.py])
file([📋verse.txt])
folder-->script
folder-->file
После использования, файл нужно закрыть методом close():
Если этого не сделать, операционная система будет считать, что файл ещё занят и не даст открыть его другим программам.
Для чтения содержимого текстового файла используются следующие методы файлового объекта:
| Метод | Назначение |
|---|---|
<файл>.read() |
Возвращает всё содержимое файла в одной строке (str). |
<файл>.readline() |
Читает следующую строку файла и возвращает её (str). |
<файл>.readlines() |
Возвращает список (list) строк файла. |
Используем все три метода для чтения содержимого следующего файла:
verse.txt
Прочитаем файл построчно:
В файле, чтобы обозначить конец строки ставится управляющая последовательность \n - перенос строки.
Функция print() не выводит управляющие символы а интерпретирует их значение.
Для записи в текстовый файл используется метод write(). Файл должен быть открыть для записи, по этому в функции open() второй аргумент будет равен "w" (от англ. write).
Метод write() не добавляет перенос на новую строку. Нужно самостоятельно добавить управляющий символ \n к записываемой строке:
Только после этого в файле будут находится значения, записанные с новой строки.
Режим "a" открывает файл для дозаписи в конец файла.
С помощью инструкции with можно автоматически закрывать файл после использования:
Дан список групп и даты проведения зачёта по дисциплине “Методы алгоритмизации и программирование”. В файле
шаблон.txtнаходится текст сообщения, на основе которого нужно создать текст письма для старост групп. Сообщение для каждой группы сохраните в файле. Имя файла[номер группы].txt.
Как открыть в скрипте файл data.txt, который находится в другом каталоге?
абсолютный путь в котором указывается полная последовательность каталогов начиная с корневого: C:\Проекты\Данные\data.txt
относительный путь: ..\Проекты\Данные\data.txt.
С помощью ..\ поднимаемся на один уровень выше, относительно текущего рабочего каталога.
Чтобы в скрипте work.py открыть файл val.csv запишем следующий относительный путь: ..\..\val.csv.
graph TD
folderC[📁 C:\]
scriptCSV([📋val.csv])
file1([📋exp.txt])
file2([📋data.txt])
script3([📋temp.txt])
foto([🖼️cat.jpg])
scriptsF["📁 Скрипты<br>(<strong>текущий рабочий каталог</strong>)"]
dataF["📁 Данные"]
projF["📁 Проекты"]
script2([🐍 work.py])
folderC---scriptCSV
projF---scriptsF
folderC---projF
projF---dataF
scriptsF---script2
scriptsF---script3
dataF---file1
dataF---file2
dataF---foto
pathlibМодуль pathlib предназначен для унифицированного указания пути к файлам и каталогам на различных операционных системах.
Метод Path.cwd() возвращает объект Path, представляющий текущий рабочий каталог программы.
Метод Path.home() возвращает путь к домашней директории текущего пользователя.
Path.home() работает кросс-платформенно и автоматически определяет правильный путь для разных операционных систем.
Метод glob() позволяет находить файлы по шаблону в указанном каталоге.
*.txt : все файлы с расширением .txt (report.txt, notes.txt)
data?.csv : файлы с одним символом после “data” (data1.csv, dataA.csv)
* : все файлы и папки (любые имена)
* - любое количество произвольных символов, ? - один любой символ.
rglob()Метод rglob() выполняет поиск во всех подкаталогах.
Pathpathlib.Path| Метод/Атрибут | Назначение | Возвращает |
|---|---|---|
Path.cwd() |
Текущий рабочий каталог | Path |
Path.home() |
Домашняя директория пользователя | Path |
glob(pattern) |
Поиск по шаблону (не рекурсивно) | генератор Path |
rglob(pattern) |
Рекурсивный поиск по шаблону | генератор Path |
exists() |
Проверка существования пути | bool |
is_file() / is_dir() |
Тип объекта | bool |
name / stem / suffix |
Части имени файла | str |
parent |
Родительский каталог | Path |