Введение
В этом практическом занятии (lab) вы научитесь проверять наличие файла в Python различными методами. Практическое занятие начинается с введения в пути к файлам, где объясняется разница между абсолютными и относительными путями. Вы создадите пример текстового файла и скрипт на Python, чтобы показать, как получить текущую рабочую директорию и определить как относительный, так и абсолютный пути к файлу.
Затем в рамках практического занятия вас научат использовать функцию os.path.exists() и объект pathlib.Path для проверки существования файла. Эти методы обеспечивают надежные способы определить, существует ли файл, прежде чем пытаться читать из него или записывать в него, предотвращая возможные ошибки в ваших программах на Python.
Введение в пути к файлам
На этом этапе мы рассмотрим концепцию путей к файлам в Python. Понимание путей к файлам является важным для чтения из файлов и записи в них, а также для навигации по файловой системе в ваших программах на Python.
Путь к файлу - это по сути адрес файла или каталога на вашем компьютере. Существует два основных типа путей к файлам:
- Абсолютные пути: Эти пути указывают полное местоположение файла или каталога, начиная от корневого каталога вашей файловой системы. Например, в системе Linux абсолютный путь может выглядеть как
/home/labex/project/my_file.txt. - Относительные пути: Эти пути задают местоположение файла или каталога относительно текущей рабочей директории. Например, если ваша текущая рабочая директория -
/home/labex/project, то относительный путьmy_file.txtбудет ссылаться на тот же файл, что и абсолютный путь/home/labex/project/my_file.txt.
Давайте начнем с создания простого текстового файла в каталоге ~/project с помощью редактора VS Code. Создайте новый файл с именем my_file.txt и добавьте следующее содержимое:
Hello, LabEx!
This is a test file.
Сохраните файл в каталоге ~/project.
Теперь давайте создадим скрипт на Python для взаимодействия с этим файлом. Создайте новый файл с именем file_paths.py в том же каталоге ~/project и добавьте следующий код:
import os
## Get the current working directory
current_directory = os.getcwd()
print("Current working directory:", current_directory)
## Define a relative path to the file
relative_path = "my_file.txt"
print("Relative path:", relative_path)
## Define an absolute path to the file
absolute_path = os.path.join(current_directory, relative_path)
print("Absolute path:", absolute_path)
В этом скрипте:
- Мы импортируем модуль
os, который предоставляет функции для взаимодействия с операционной системой. - Мы используем
os.getcwd()для получения текущей рабочей директории. - Мы определяем относительный путь к файлу
my_file.txt. - Мы используем
os.path.join()для объединения текущей рабочей директории и относительного пути для создания абсолютного пути.
Теперь давайте запустим скрипт. Откройте терминал в VS Code и перейдите в каталог ~/project (по умолчанию вы уже должны находиться там). Затем выполните скрипт с помощью следующей команды:
python file_paths.py
Вы должны увидеть вывод, похожий на следующий:
Current working directory: /home/labex/project
Relative path: my_file.txt
Absolute path: /home/labex/project/my_file.txt
Это демонстрирует, как получить текущую рабочую директорию и построить как относительные, так и абсолютные пути к файлам в Python. Понимание этих концепций является фундаментальным для работы с файлами и каталогами в ваших программах на Python.
Использование os.path.exists()
На этом этапе мы научимся использовать функцию os.path.exists() для проверки существования файла или каталога. Это фундаментальная операция при работе с файлами, так как позволяет обрабатывать ситуации, когда файл может отсутствовать или каталог может не существовать.
Функция os.path.exists() принимает один аргумент: путь к файлу или каталогу, существование которого вы хотите проверить. Она возвращает True, если файл или каталог существует, и False в противном случае.
Давайте модифицируем скрипт file_paths.py, который мы создали на предыдущем этапе, чтобы использовать os.path.exists(). Откройте файл file_paths.py в редакторе VS Code и добавьте следующий код:
import os
## Get the current working directory
current_directory = os.getcwd()
## Define a relative path to the file
relative_path = "my_file.txt"
## Define an absolute path to the file
absolute_path = os.path.join(current_directory, relative_path)
## Check if the file exists using the relative path
if os.path.exists(relative_path):
print("The relative path 'my_file.txt' exists.")
else:
print("The relative path 'my_file.txt' does not exist.")
## Check if the file exists using the absolute path
if os.path.exists(absolute_path):
print("The absolute path", absolute_path, "exists.")
else:
print("The absolute path", absolute_path, "does not exist.")
## Check if a directory exists
directory_path = current_directory
if os.path.exists(directory_path):
print("The directory", directory_path, "exists.")
else:
print("The directory", directory_path, "does not exist.")
## Check if a non-existent file exists
non_existent_file = "non_existent_file.txt"
if os.path.exists(non_existent_file):
print("The file", non_existent_file, "exists.")
else:
print("The file", non_existent_file, "does not exist.")
В этом скрипте:
- Мы используем
os.path.exists()для проверки существования файлаmy_file.txtкак по относительному, так и по абсолютному пути. - Мы также проверяем существование текущего каталога, которое должно всегда быть истинным.
- Наконец, мы проверяем существование несуществующего файла, что должно вернуть
False.
Теперь давайте запустим скрипт еще раз. Откройте терминал в VS Code и выполните скрипт с помощью следующей команды:
python file_paths.py
Вы должны увидеть вывод, похожий на следующий:
The relative path 'my_file.txt' exists.
The absolute path /home/labex/project/my_file.txt exists.
The directory /home/labex/project exists.
The file non_existent_file.txt does not exist.
Это демонстрирует, как использовать os.path.exists() для проверки существования файлов и каталогов в ваших программах на Python. Это важный шаг перед попыткой чтения из файла или записи в него, так как может предотвратить ошибки и обеспечить правильное поведение вашей программы.
Проверка с использованием pathlib.Path
На этом этапе мы рассмотрим модуль pathlib, который предоставляет объектно-ориентированный способ взаимодействия с файлами и каталогами. Мы будем особенно сосредоточены на использовании pathlib.Path для проверки существования файлов и каталогов, что представляет собой альтернативу функции os.path.exists().
Модуль pathlib предлагает более современный и интуитивно понятный подход к работе с путями к файлам по сравнению с более старым модулем os.path. Он представляет пути к файлам в виде объектов, позволяя выполнять различные операции с использованием методов этих объектов.
Давайте модифицируем скрипт file_paths.py, с которым мы работали ранее, чтобы использовать pathlib.Path. Откройте файл file_paths.py в редакторе VS Code и добавьте следующий код:
import os
from pathlib import Path
## Get the current working directory
current_directory = os.getcwd()
## Define a relative path to the file
relative_path = "my_file.txt"
## Define an absolute path to the file
absolute_path = os.path.join(current_directory, relative_path)
## Create Path objects for relative and absolute paths
relative_path_obj = Path(relative_path)
absolute_path_obj = Path(absolute_path)
## Check if the file exists using the relative path object
if relative_path_obj.exists():
print("The relative path 'my_file.txt' exists (using pathlib).")
else:
print("The relative path 'my_file.txt' does not exist (using pathlib).")
## Check if the file exists using the absolute path object
if absolute_path_obj.exists():
print("The absolute path", absolute_path, "exists (using pathlib).")
else:
print("The absolute path", absolute_path, "does not exist (using pathlib).")
## Check if a directory exists using pathlib
directory_path_obj = Path(current_directory)
if directory_path_obj.exists():
print("The directory", current_directory, "exists (using pathlib).")
else:
print("The directory", current_directory, "does not exist (using pathlib).")
## Check if a non-existent file exists using pathlib
non_existent_file = "non_existent_file.txt"
non_existent_path_obj = Path(non_existent_file)
if non_existent_path_obj.exists():
print("The file", non_existent_file, "exists (using pathlib).")
else:
print("The file", non_existent_file, "does not exist (using pathlib).")
В этом скрипте:
- Мы импортируем класс
Pathиз модуляpathlib. - Мы создаем объекты
Pathкак для относительного, так и для абсолютного пути к файлуmy_file.txt. - Мы используем метод
exists()объектовPathдля проверки существования файла. - Мы также проверяем существование текущего каталога и несуществующего файла с использованием
pathlib.
Теперь давайте запустим скрипт еще раз. Откройте терминал в VS Code и выполните скрипт с помощью следующей команды:
python file_paths.py
Вы должны увидеть вывод, похожий на следующий:
The relative path 'my_file.txt' exists (using pathlib).
The absolute path /home/labex/project/my_file.txt exists (using pathlib).
The directory /home/labex/project exists (using pathlib).
The file non_existent_file.txt does not exist (using pathlib).
Это демонстрирует, как использовать pathlib.Path в качестве альтернативы os.path.exists() для проверки существования файлов и каталогов. Модуль pathlib предлагает более объектно-ориентированный и часто более читаемый способ взаимодействия с путями к файлам в Python.
Резюме
В этом практическом занятии мы начали с изучения концепции путей к файлам в Python, различая абсолютные и относительные пути. Мы узнали, что абсолютные пути указывают полное местоположение файла, в то время как относительные пути задают местоположение относительно текущего рабочего каталога.
Затем мы создали текстовый файл с именем my_file.txt и Python-скрипт file_paths.py, чтобы продемонстрировать, как получить текущий рабочий каталог с помощью os.getcwd() и как определить как относительный, так и абсолютный пути к созданному файлу с использованием модуля os.



