Как проверить, существует ли файл в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (lab) вы научитесь проверять наличие файла в Python различными методами. Практическое занятие начинается с введения в пути к файлам, где объясняется разница между абсолютными и относительными путями. Вы создадите пример текстового файла и скрипт на Python, чтобы показать, как получить текущую рабочую директорию и определить как относительный, так и абсолютный пути к файлу.

Затем в рамках практического занятия вас научат использовать функцию os.path.exists() и объект pathlib.Path для проверки существования файла. Эти методы обеспечивают надежные способы определить, существует ли файл, прежде чем пытаться читать из него или записывать в него, предотвращая возможные ошибки в ваших программах на Python.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/build_in_functions -.-> lab-559511{{"Как проверить, существует ли файл в Python"}} python/importing_modules -.-> lab-559511{{"Как проверить, существует ли файл в Python"}} python/standard_libraries -.-> lab-559511{{"Как проверить, существует ли файл в Python"}} python/file_operations -.-> lab-559511{{"Как проверить, существует ли файл в Python"}} python/os_system -.-> lab-559511{{"Как проверить, существует ли файл в Python"}} end

Введение в пути к файлам

На этом этапе мы рассмотрим концепцию путей к файлам в 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.