Os path join windows

Пройдите тест, узнайте какой профессии подходите

Работать самостоятельно и не зависеть от других

Работать в команде и рассчитывать на помощь коллег

Организовывать и контролировать процесс работы

Введение в работу с путями файлов в Python

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

Кинга Идем в IT: пошаговый план для смены профессии

Использование модуля 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 the os.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

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 10 создать пользователя без пароля
  • Что значит windows 10 professional
  • Как раздать интернет с windows mobile
  • Postgresql dump database windows
  • Программа для чтения виртуальных дисков для windows 10