Пройдите тест, узнайте какой профессии подходите
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы
Введение в работу с путями файлов в Python
Работа с путями файлов является важным аспектом программирования на Python, особенно когда речь идет о манипуляции файлами и директориями. В Python существует несколько модулей, которые помогают упростить эту задачу, включая os
и pathlib
. В этой статье мы рассмотрим основные методы и функции, которые помогут вам эффективно работать с путями файлов в Python. Понимание того, как правильно работать с путями файлов, может значительно упростить вашу работу и сделать ваш код более надежным и переносимым.

Использование модуля os для работы с путями
Модуль os
предоставляет множество функций для работы с операционной системой, включая функции для работы с путями файлов. Этот модуль является частью стандартной библиотеки Python и широко используется для выполнения различных задач, связанных с операционной системой. Вот некоторые из наиболее часто используемых функций:
os.path.join
Функция os.path.join
используется для объединения нескольких компонентов пути в один путь. Это особенно полезно для создания путей, которые будут работать на разных операционных системах. Например, на Unix-системах разделителем путей является /
, а на Windows — \
. Использование os.path.join
позволяет избежать проблем с несовместимостью путей.
os.path.exists
Функция os.path.exists
проверяет, существует ли указанный путь. Это полезно для проверки наличия файла или директории перед выполнением операций, которые могут вызвать ошибки, если путь не существует.
os.path.abspath
Функция os.path.abspath
возвращает абсолютный путь для указанного относительного пути. Это полезно для получения полного пути к файлу или директории, что может быть необходимо для выполнения определенных операций.
Преимущества и использование модуля pathlib
Модуль pathlib
был введен в Python 3.4 и предоставляет объектно-ориентированный подход к работе с путями файлов. Он обладает рядом преимуществ по сравнению с модулем os
, таких как более интуитивный и читаемый синтаксис, а также поддержка всех основных операций с путями файлов.
Создание пути
Создание пути с использованием pathlib
выглядит более интуитивно и читаемо. Вместо использования строк и функций, вы работаете с объектами, что делает код более понятным и легким для чтения.
Проверка существования пути
Проверка существования пути с использованием pathlib
также проста и интуитивна. Вместо вызова функции, вы просто вызываете метод объекта.
Получение абсолютного пути
Получение абсолютного пути с использованием pathlib
выполняется с помощью метода resolve
. Этот метод возвращает полный путь к файлу или директории.
Получение текущего пути и навигация по файловой системе
Работа с текущим путем и навигация по файловой системе является важной частью работы с путями файлов. Рассмотрим, как это можно сделать с использованием модулей os
и pathlib
.
Получение текущего пути
С помощью модуля os
можно получить текущий рабочий каталог с помощью функции os.getcwd
. Это полезно для определения текущего местоположения в файловой системе.
С помощью модуля pathlib
можно получить текущий рабочий каталог с помощью метода Path.cwd
. Этот метод возвращает объект Path, представляющий текущий рабочий каталог.
Навигация по файловой системе
Навигация по файловой системе может включать переход в другой каталог, создание новых директорий и удаление существующих. Эти операции могут быть выполнены с использованием как модуля os
, так и модуля pathlib
.
Переход в другой каталог
С помощью модуля os
можно изменить текущий рабочий каталог с помощью функции os.chdir
. Это полезно для выполнения операций в другом каталоге.
С помощью модуля pathlib
можно изменить текущий рабочий каталог с помощью метода chdir
. Этот метод изменяет текущий рабочий каталог на указанный путь.
Создание новой директории
С помощью модуля os
можно создать новую директорию с помощью функции os.makedirs
. Эта функция создает все промежуточные директории, если они не существуют.
С помощью модуля pathlib
можно создать новую директорию с помощью метода mkdir
. Этот метод также может создавать все промежуточные директории, если указать параметр parents=True
.
Удаление директории
С помощью модуля os
можно удалить директорию с помощью функции os.rmdir
. Эта функция удаляет только пустые директории.
С помощью модуля pathlib
можно удалить директорию с помощью метода rmdir
. Этот метод также удаляет только пустые директории.
Практические примеры и советы
Пример 1: Создание и удаление файла
Создание и удаление файла является одной из основных операций при работе с путями файлов. Рассмотрим, как это можно сделать с использованием pathlib
.
Пример 2: Чтение и запись в файл
Чтение и запись в файл также являются важными операциями. Рассмотрим, как это можно сделать с использованием pathlib
.
Совет: Используйте pathlib для новых проектов
Если вы начинаете новый проект или обновляете существующий, рекомендуется использовать модуль pathlib
вместо os
для работы с путями файлов. pathlib
предоставляет более удобный и интуитивно понятный интерфейс, а также поддерживает все основные операции, необходимые для работы с путями файлов. Это делает код более читаемым и легким для сопровождения.
Работа с путями файлов в Python может быть простой и эффективной, если использовать правильные инструменты. Модули os
и pathlib
предоставляют все необходимые функции для выполнения различных операций с путями файлов, и выбор между ними зависит от ваших предпочтений и требований проекта. Независимо от того, какой модуль вы выберете, важно понимать основные концепции и методы работы с путями файлов, чтобы ваш код был надежным и переносимым.
Читайте также
Last Updated :
08 Oct, 2024
The os.path.join() method is a function in the os module that joins one or more path components intelligently. It constructs a full path by concatenating various components while automatically inserting the appropriate path separator (/ for Unix-based systems and \ for Windows).
Example
Python
import os # Example of using os.path.join path = os.path.join("/home", "user", "documents", "/etc", "config.txt") print(path)
Explanation: In this case, the presence of the absolute path “/etc” resets the earlier components, resulting in only the absolute path being displayed.
Python os.path.join() Method Syntax
Syntax: os.path.join(path, *paths)
Parameter:
- path: A path-like object representing a file system path.
- *path: A path-like object representing a file system path. It represents the path components to be joined. A path-like object is either a string or bytes object representing a path.
- Note: The special syntax *args (here *paths) in function definitions in python is used to pass a variable number of arguments to a function.
Return Type: This method returns a string which represents the concatenated path components.
How os.path.join()
Works
The os.path.join()
method processes the path components and resolves them into a single, absolute path. It handles:
- Path Separators: It uses the correct path separator based on the operating system.
- Redundant Separators: It removes unnecessary separators and upholds a clean path structure.
- Absolute Paths: If an absolute path is provided at any level, it resets the previous components to that absolute path.
os.path.join() Function Examples and Uses Cases
Below are some examples and use cases by which we can join file paths and handle file paths safely in Python OS.
Concatenating Path Components
Python
import os # Path 1 path = "/home" # Join various path components print(os.path.join(path, "User/Desktop", "file.txt")) # Path 2 path = "User/Documents" # Join various path components print(os.path.join(path, "/home", "file.txt")) # Path 3 path = "/User" # Join various path components print(os.path.join(path, "Downloads", "file.txt", "/home"))
Output
/home/User/Desktop/file.txt /home/file.txt /home
Revised Explanation of the Code Outputs
- Path 1: This output is correct as the function constructs the path based on the provided components.
- Path 2: Here,
"/home"
is an absolute path. When an absolute path is included in theos.path.join()
function, it resets the previous path ("User/Documents"
), and the result reflects only the absolute path combined with the last component ("file.txt"
). - Path 3: Again, the last component
"/home"
is treated as an absolute path, which resets the previous components. As a result, only"/home"
remains in the output.
Reading and Writing Files
example.txt
GeeksforGeeks
Python
import os # Base directory and filename base_dir = '/home/user' filename = 'example.txt' # Construct the full path full_path = os.path.join(base_dir, filename) # Reading and writing files using the full path with open(full_path, 'r') as file: content = file.read() print(content)
Output:
GeeksforGeeks
Explanation: In this example, the os.path.join()
method is utilized to form a complete file path by joining the base directory and the filename. The constructed path is then used to read the content of the file named example.txt
.
Listing Files in a Directory
Python
import os # Current working directory current_dir = os.getcwd() # List files in the current directory files_in_dir = os.listdir(current_dir) # Iterate over files and print their full paths for file_name in files_in_dir: file_path = os.path.join(current_dir, file_name) print(file_path)
Output
/home/guest/sandbox/input.txt /home/guest/sandbox/driver /home/guest/sandbox/Solution.py
Explanation: In this example, the `os.path.join()` method is employed to generate the full path for each file in the current working directory. The complete paths are then printed, allowing for a comprehensive listing of all files in the directory.
Iterating Over Paths with a For Loop
Python
import os # List of file names names = ['file1.txt', 'file2.txt', 'file3.txt'] # Iterate over file names and process each file for file_name in names: file_path = os.path.join('/home/user', file_name) print(f"Processing file: {file_path}")
Output
Processing file: /home/user/file1.txt Processing file: /home/user/file2.txt Processing file: /home/user/file3.txt
Explanation: In this example, the `os.path.join()` method is utilized within a loop to dynamically create the full path for each file name listed. The constructed paths are then printed to indicate the processing of each respective file.
Introduction
The os.path.join()
function is a powerful tool for creating file paths in Python. It intelligently combines path components using the appropriate separator for your operating system, making your code more portable and reliable.
Basic Syntax
Here’s the basic syntax for using os.path.join()
:
import os.path
path = os.path.join(path1, path2, path3, ...) # Combines multiple path components
Simple Examples
Let’s look at basic examples:
import os.path
# Basic path joining
data_path = os.path.join('data', 'users', 'profiles.json')
print(f"Data path: {data_path}")
# Using with current directory
current_dir = os.getcwd()
config_path = os.path.join(current_dir, 'config.ini')
print(f"Config path: {config_path}")
# Joining multiple components
log_path = os.path.join('var', 'log', 'app', 'error.log')
print(f"Log path: {log_path}")
Cross-Platform Compatibility
Here’s how os.path.join()
handles different operating systems:
import os.path
# Windows vs Unix path separators
path = os.path.join('users', 'john', 'documents')
# On Windows: users\john\documents
# On Unix: users/john/documents
# Absolute paths
root_path = os.path.join('C:\\' if os.name == 'nt' else '/', 'program_files')
user_path = os.path.join(os.path.expanduser('~'), 'downloads')
Working with Directories
Common patterns for directory operations:
import os.path
def create_directory_structure(base_path, folders):
"""Create a nested directory structure"""
for folder in folders:
full_path = os.path.join(base_path, folder)
if not os.path.exists(full_path):
os.makedirs(full_path)
print(f"Created directory: {full_path}")
# Example usage
project_structure = [
'src',
os.path.join('src', 'components'),
os.path.join('src', 'assets'),
'docs',
'tests'
]
create_directory_structure('my_project', project_structure)
Common Use Cases
Here are some practical examples:
import os.path
class ProjectPaths:
def __init__(self, base_dir):
self.base_dir = base_dir
self.config_dir = os.path.join(base_dir, 'config')
self.data_dir = os.path.join(base_dir, 'data')
self.logs_dir = os.path.join(base_dir, 'logs')
def get_config_file(self, filename):
return os.path.join(self.config_dir, filename)
def get_data_file(self, filename):
return os.path.join(self.data_dir, filename)
def get_log_file(self, filename):
return os.path.join(self.logs_dir, filename)
# Example usage
project = ProjectPaths('/my/project')
config_file = project.get_config_file('settings.json')
data_file = project.get_data_file('users.db')
log_file = project.get_log_file('app.log')
Best Practices
- Always use os.path.join() instead of string concatenation
- Avoid hardcoding path separators (‘/’ or ‘\\’)
- Use relative paths when possible for better portability
- Handle path existence before performing operations
Common Pitfalls
Here are some situations to watch out for:
import os.path
# Absolute paths override previous components
print(os.path.join('home', '/usr', 'bin')) # Results in '/usr/bin'
# Empty strings are handled differently
print(os.path.join('path', '', 'file')) # Results in 'path/file'
# Forward slashes in path components
print(os.path.join('path', 'sub/folder', 'file')) # May not work as expected
Path Manipulation Examples
Additional useful patterns with os.path.join()
:
import os.path
def get_file_paths(base_dir, extension):
"""Get all files with specific extension"""
file_paths = []
for root, dirs, files in os.walk(base_dir):
for file in files:
if file.endswith(extension):
file_paths.append(os.path.join(root, file))
return file_paths
# Example usage
python_files = get_file_paths('src', '.py')
for file_path in python_files:
print(f"Found Python file: {file_path}")
Related Articles
- How to Use os.mkdir in Python
- Python: Using os.listdir to List Files in a Directory
- How to Use os.getenv in Python
Conclusion
os.path.join()
is an essential tool for handling file paths in Python. It ensures your code works across different operating systems and provides a clean, maintainable way to construct file paths. Remember to follow best practices and avoid common pitfalls to write robust, platform-independent code.
Очень важная функция, которая будет постоянно встречаться вам в различных проектах и примерах, называется join
.
os.path.join
в Python представляет собой мощный инструмент для создания путей к файлам и директориям, обеспечивая правильное составление их в зависимости от операционной системы. Этот метод автоматически добавляет необходимые разделители между компонентами пути, что упрощает работу с файловой системой и повышает переносимость кода.
Используется чтобы объединить несколько компонентов пути в одно значение
os.path.join(path, *paths)
Имеет следующие параметры:
-
path
— начальный путь, -
*paths
— компоненты пути (произвольное количество значений)
С помощью os.path.join
можно избежать множества распространенных ошибок, таких как ненужные или отсутствующие разделители.
Например, вместо того чтобы вручную собирать путь в виде строки "/home/user/" + "documents/" + "file.txt"
, вы можете использовать os.path.join("home", "user", "documents", "file.txt")
. Рассмотрим примеры работы:
>>> print(os.path.join("home", "user", "documents", "file.txt"))
home/user/documents/file.txt
Также рассмотрим следующий пример. В нем мы передаем значения в виде кортежа:
import os.path
print(os.path.join('home', 'user', 'pyhub'))
paths = ('one', 'two', 'three')
print(os.path.join(*paths))
Мы получим следующий результат:
home/user/pyhub
one/two/three
Преимуществом использования os.path.join
является то, что она позволяет коду оставаться совместимым со всеми операционными системами, поскольку подставляет разделитель, соответствующий платформе, на которой он работает.
В windows результат будет таким
home\user\egoroff
one\two\three
а в linux
home/user/egoroff
one/two/three
Python разработчики могут снизить риск таких ошибок, так как данный метод автоматически обеспечивает правильный формат пути, учитывая особенности различных операционных систем.
Кроме того, данный метод способен обрабатывать абсолютные пути, игнорируя остальные компоненты, что дает возможность строить более гибкие и адаптивные алгоритмы. Таким образом, os.path.join
не просто утилита — это ключ к созданию кросс-платформенных приложений, которые без труда справляются с файловыми системами разных операционных систем.
Нормализация пути в Python
Разберем работу двух функций:
-
os.path.normpath(path)
-
os.path.abspath(path)
Функция os.path.normpath(path)
Пути, полученные с помощью join()
или со встроенными переменными, могут иметь дополнительные разделители или компоненты относительного пути. Используйте os.path.normpath
, чтобы избавиться от них:
import os.path
print(os.path.normpath('one//two//three'))
print(os.path.normpath('one/../alt/two/three'))
print(os.path.normpath('one/./two/./three'))
Мы получим следующий результат:
one/two/three
alt/two/three
one/two/three
Функция os.path.abspath(path)
Функция os.path.abspath
используется для преобразования относительного пути в абсолютное
print(os.path.abspath('.'))
print(os.path.abspath('../alt/two/three'))
print(os.path.abspath('./three'))
Функция os.path.abspath
возвращает нормализованную абсолютную версию пути.
/Users/permin0ff/Downloads/project/fastapi_ecommerce/app
/Users/permin0ff/Downloads/project/fastapi_ecommerce/alt/two/three
/Users/permin0ff/Downloads/project/fastapi_ecommerce/app/three
На большинстве платформ это эквивалентно вызову функции os.path.normpath()
следующим образом:
os.path.normpath(join(os.getcwd(),path))
Введение | |
abspath | |
basename | |
Все методы path | |
dirname | |
exists | |
isdir | |
isfile | |
join | |
realpath | |
split | |
splitext | |
os.pardir: Путь до родителя | |
Похожие статьи |
Введение
os.path.abspath()
Абсолютный путь до файла можно получить с помощью abspath()
import os
print(os.path.abspath(__file__))
C:\Users\Andrei\openapi\yaml_to_json.py
os.path.basename()
Получить из пути до файла только имя файла можно с помощью
basename()
import os
print(os.path.basename(«C:\\Users\\Andrei\\openapi.yaml»))
openapi.yaml
Все доступные методы
Список всех атрибутов и методов os.path можно получить с помощью функции
dir()
print(dir(os.path))
[‘__all__’, ‘__builtins__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘_get_sep’, ‘_joinrealpath’, ‘_path_normpath’, ‘_varprog’, ‘_varprogb’, ‘abspath’, ‘altsep’, ‘basename’, ‘commonpath’, ‘commonprefix’, ‘curdir’, ‘defpath’, ‘devnull’, ‘dirname’, ‘exists’, ‘expanduser’, ‘expandvars’, ‘extsep’, ‘genericpath’, ‘getatime’, ‘getctime’, ‘getmtime’, ‘getsize’, ‘isabs’, ‘isdir’, ‘isfile’, ‘islink’, ‘ismount’, ‘join’, ‘lexists’, ‘normcase’, ‘normpath’, ‘os’, ‘pardir’, ‘pathsep’, ‘realpath’, ‘relpath’, ‘samefile’, ‘sameopenfile’, ‘samestat’, ‘sep’, ‘split’, ‘splitdrive’, ‘splitext’, ‘stat’, ‘supports_unicode_filenames’, ‘sys’]
os.path.dirname()
Имя директории, в которой находится файл можно получить с помощью dirname
Например, если нужно получить директорию, в которой находится используемый Python
можно выполнить
import os
import sys
print(os.path.dirname(sys.executable)
‘C:\\Users\\ao\\AppData\\Local\\Programs\\Python\\Python312\\python.exe’
Рассмотрим примеры, когда нужно получить путь до директории с файлом из проекта, например с
настройками проекта
config.toml
|— config.toml
`— dirname_ex.py
import os
print(os.path.dirname(«./config.toml»))
python dirname_ex.py
.
Обсудим разницу между dirname() и
os.getcwd()
os
`— dirname_demo
|— lib
| |— config.toml
| `— utils.py
`— test
`— test.py
Директорию os добавим в PYTHONPATH
чтобы сделать подобие
пакета
cd /c/Users/ao/os
export PYTHONPATH=$(pwd)
echo $PYTHONPATH
/c/Users/ao/os
Функция demo() из файла
utils.py
будет выводить os.path.dirname() и os.getcwd()
Аргументом os.path.dirname() будет атрибут
__file__
про который можно прочитать
здесь
.
Обратите внимание на то, что
utils.py
и
config.toml
находятся в одной директории, а
test.py
расположен в соседней.
import os
def demo():
for path in [«config.toml», __file__]:
print(f«os.path.dirname(‘{path}‘):»)
print(f«PATH: {os.path.dirname(path)}»)
print(f«CWD : {os.getcwd()}»)
if __name__ == «__main__»:
print(«utils.py direct call»)
else:
print(«utils.py called from other module»)
demo()
Всё, что делает
test.py
это импорт
utils.py
import dirname.lib.utils
Если вызвать
utils.py
напрямую из
dirname_demo
то:
Путь до файла
config.toml
не будет найден,
os.path.dirname(__file__) укажет на директорию lib
getcwd() на директорию dirname_demo из которой был
вызван скрипт.
python lib/utils.py
utils.py direct call
os.path.dirname(‘config.toml’):
PATH:
os.path.dirname(‘C:\Users\ao\os\dirname_demo\lib\utils.py’):
PATH: C:\Users\ao\os\dirname_demo\lib
CWD : C:\Users\ao\os\dirname_demo
В случае если
utils.py
вызван напрямую из
lib
то:
Путь до файла
config.toml
всё равно не будет найден,
os.path.dirname(__file__) укажет на директорию lib
getcwd() тоже на директорию lib так как скрипт теперь вызван
оттуда. Важно понимать, что это совпадение носит частный характер.
python utils.py
utils.py direct call
os.path.dirname(‘config.toml’):
PATH:
os.path.dirname(‘C:\Users\ao\os\dirname_demo\lib\utils.py’):
PATH: C:\Users\ao\os\dirname_demo\lib
CWD : C:\Users\ao\os\dirname_demo\lib
Если запустить
test.py
то
os.path.dirname(__file__) укажет на директорию lib
getcwd() на директорию test так как скрипт теперь вызван
оттуда.
python test.py
utils.py called from other module
os.path.dirname(‘config.toml’):
PATH:
os.path.dirname(‘C:\Users\ao\os\dirname_demo\lib\utils.py’):
PATH: C:\Users\ao\os\dirname_demo\lib
CWD : C:\Users\ao\os\dirname_demo\test
Теперь предположим, что
utils.py
работает с
config.py
А вызвается
utils.py
из
test.py
Чтобы стабильно получать путь до
config.toml
нужно воспользоваться
os.path.dirname(__file__)
и
os.path.join()
# utils.py
import os
def demo():
filename = «config.toml»
file_path = os.path.join(os.path.dirname(__file__), filename)
print(file_path)
if __name__ == «__main__»:
print(«utils.py direct call»)
else:
print(«utils.py called from other module»)
demo()
Теперь независимо от того откуда вызвается demo()
путь до файла с конфигом находится одинакого.
python utils.py
utils.py direct call
C:\Users\ao\os\dirname_demo\lib\config.toml
python test.py
utils.py called from other module
C:\Users\ao\os\dirname_demo\lib\config.toml
Изучить применение os.path.dirname()
для чтения конфигурационных файлов можно в статье
«Python configparser»
os.path.exists()
Проверить существует ли путь поможет exists().
Альтернативный способ этой проверки — использовать
Path.exists()
из библиотеки
pathlib
sandbox
|— exists_demo.py
`— real.txt
import os
print(os.path.exists(«real.txt»))
print(os.path.exists(«missing.txt»))
python exists_demo.py
True
False
os.path.isdir()
sandbox
|— directory
| `— nested.txt
|— is_dir_demo.py
`— real.txt
import os
print(os.path.isdir(«real.txt»))
print(os.path.isdir(«directory»))
python is_dir_demo.py
False
True
os.path.isfile()
sandbox
|— directory
| `— nested.txt
|— is_file_demo.py
`— real.txt
import os
print(os.path.isfile(«real.txt»))
print(os.path.isfile(«directory»))
python is_file_demo.py
True
False
Практический пример применения isfile
вы можете изучить в статье
shutil
РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет
Конец рекламы хостинга Beget, который я всем рекомендую
os.path.join()
os.path.join() избавляет от необходимости думать о том нужно ли ставить слеш в
путь или нет, а также какой именно слеш ставить в зависимости от ОС.
Как можно убедиться из кода (Python 3.10) возвращает LiteralString, обычный
str
или bytes.
@overload
def join(__a: LiteralString, *paths: LiteralString) -> LiteralString: …
@overload
def join(__a: StrPath, *paths: StrPath) -> str: …
@overload
def join(__a: BytesPath, *paths: BytesPath) -> bytes: …
Если в Windows нужно объединить путь с именем диска, то слеши проставить придётся:
Пример применения os.path.join() в
Windows
import os
pf = os.path.join(«C:\\», «Program Files»)
os.chdir(pf)
print(os.listdir())
[‘7-Zip’, ‘Adobe’, ‘Android’, ‘Common Files’, ‘DB Browser for SQLite’, ‘Docker’, ‘dotnet’, ‘Git’, ‘Google’, ‘Hyper-V’, ‘Internet Explorer’, ‘Microsoft’, ‘Microsoft Office 15’, ‘Microsoft SQL Server’, ‘Microsoft Visual Studio’, ‘Mozilla Firefox’, ‘Notepad++’, ‘Npcap’, ‘OpenVPN Connect’, ‘PowerShell’, ‘Windows Defender’, ‘WindowsPowerShell’, ‘WinMerge’, ‘Wireshark’, ‘WSL’]
А вот дальше уже можно расслабиться
import os
pf = os.path.join(«C:\», «Program Files»)
p7 = os.path.join(pf, «PowerShell», «7»)
os.chdir(p7)
print(os.listdir())
[‘Accessibility.dll’, ‘assets’, ‘clretwrc.dll’ … ‘wpfgfx_cor3.dll’, ‘zh-Hans’, ‘zh-Hant’]
Пример создания пути до файла во вложенной директории
├───config.py
└───etc
└───token.json
# config.py
token_path = os.path.join(os.path.dirname(__file__), «etc», «token.json»)
Пример применения os.path.join()
вы можете изучить в статье
shutil
Ещё один пример применения os.path() вы можете изучить также в статье
«Пакеты в Python»
import os
file_path = os.path.join(os.environ.get(«HOME»), «test.txt»)
print(file_path)
with open(file_path, «w») as f:
f.write(«»)
python os_path_ex.py
/home/andrei/test.txt
Проверим, что файл создан в домашней директории.
ls ~
test.txt
У path довольно обширный функционал.
import os
file_path = os.path.join(os.environ.get(«HOME»), «test.txt»)
print(os.path.basename(file_path))
test.txt
os.path.realpath()
Полный путь до файла можно получить с помощью realpath
demo/
|— config.toml
`— realpath_ex.py
import os
print(os.path.realpath(«./config.toml»))
python realpath_ex.py
C:\Users\AO\demo\config.toml
os.path.split()
Отделить имя файла от полного пути поможет split, а splitext отделит расширение файла от всего остального.
import os
print(os.path.split(file_path))
print(os.path.splitext(file_path))
(‘/home/andrei’, ‘test.txt’)
(‘/home/andrei/test’, ‘.txt’)
os.pardir
Применение os.path совместно с
os.pardir
для получения путей до родительских директорий.
Рассмотрим как из скрипта os_pardir.py, который находится в директории os получить путь до файла
requirements.txt, который находится в соседней директории fastapi
python/
|— fastapi
| `— requirements.txt
`— os
`— os_pardir.py
# os_pardir.py
import os
p = os.path.join(os.path.dirname(__file__), os.path.pardir)
print(p)
p = os.path.join(os.path.pardir, «fastapi», «requirements.txt»)
print(p)
with open(p, «r») as f:
print(f.read())
C:\Users\Andrei\python\..
..\fastapi\requirements.txt
fastapi
uvicorn[standard]
Пути до поддиректорий
Рассмотрим пример получения путей до директорий, вложенных в соседнюю директорию.
Из файла
demo.py
нужно получить пути до всех директорий, вложенных в log, исключив обычные файлы.
list_dir/
|— log
| |— dir_a
| | `— file_a
| |— dir_b
| | |— file_b
| | `— file_c
| |— file_x
| `— file_y
`— src
`— demo.py
Следующий скрипт должен вернуть пути до dir_a и dir_b но не до
file_x
и
file_y.
Убедитесь, что вы с знакомы с тем, что такое
генератор списков
В качестве проверки выведем на экран содержимое полученных путей с помощью
os.listdir()
import os
def get_paths(path):
return [os.path.join(path, x) for x in os.listdir(path)]
# Получаем путь до директории list_dir
root = os.path.join(os.path.dirname(__file__), os.path.pardir)
# Получаем путь до директории list_dir/log
log_dir = os.path.join(root, «log»)
# Получаем пути до всех файлов в list_dir/log
paths = get_paths(log_dir)
# Оставляем только пути до директорий
log_dirs = list(filter(os.path.isdir, paths))
# Выводим на экран содержимое директорий
for d in log_dirs:
print(d)
print(os.listdir(d))
Можно не создавать отдельную функцию
import os
# Получаем путь до директории list_dir
root = os.path.join(os.path.dirname(__file__), os.path.pardir)
…
paths = [os.path.join(log_dir, x) for x in os.listdir(log_dir)]
…
python demo.py
C:\Users\A\list_dir\src\..\log\dir_a
[‘file_a’]
C:\Users\A\list_dir\src\..\log\dir_b
[‘file_b’, ‘file_c’]
Автор статьи: Андрей Олегович
Похожие статьи
Основы Python | |
Python | |
Установка Python | |
ООП в Python | |
Функции | |
docstring | |
#!: Shebang | |
Объекты | |
os | |
pathlib | |
Сложности при работе с Python |