- 4 Useful Examples of Python os.path.join
- Understanding Python OS Path Join Method
- os.path.join Syntax
- os.path.join Example 1: Joining Two Paths Together
- os.path.join Example 2: Combining Multiple Paths and File Names
- os.path.join Example 3: Combining Multiple Paths and absolute path
- os.path.join Example 4: Combining Multiple Paths and ”
- os.path.join Example 5: os.path.join + os.path.split
- Как прописать на Python путь к файлу в Windows, Mac и Linux
- Неправильное решение: построить путь к файлу вручную
- Старое решение: построить путь к файлу при помощи модуля os.path
- Лучшее решение: использовать pathlib в Python 3
- 1 комментарий к “Как прописать на Python путь к файлу в Windows, Mac и Linux”
4 Useful Examples of Python os.path.join
The os.path.join() method is a versatile tool that can be used in a number of ways. In this blog post, we will look at three examples of how to use the os.path.join() method in Python. We will start with a basic example of how to join two paths together, and then move on to more complex examples that involve combining multiple paths and file names. Let’s get started!
Understanding Python OS Path Join Method
- The os.path.join() method combines components in a pathname to create a full pathname.
- The os.path.join() method makes it easy to combine two or more pathname components.
- The os.path.join() automatically adds forward slashes (“/”) into the pathname when needed.
- If a path component represents an absolute path, then all previous components joined are discarded and joining continues from the absolute path component.
- If the last path component to be joined is empty then a directory separator (‘/’) is put at the end.
os.path.join Syntax
os.path.join(path, *paths)
Parameters
- 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.
Return Value
The os.path.join() method returns a string that represents the concatenated path components.
os.path.join Example 1: Joining Two Paths Together
The os.path.join() method can be used to join two paths together into a single string. The following code will create a new path that is the combination of “/home” and “howtouselinux”:
>>> print(os.path.join(“/home”, “howotouselinux”))
/home/howotouselinux
os.path.join Example 2: Combining Multiple Paths and File Names
The os.path.join() method can also be used to combine multiple paths and file names into a single string. The following code will create a new path that is the combination of “/home”, “howtouselinux”, and “test.txt”:
>>> print(os.path.join(“/home”, “howotouselinux”,”test.txt”))
/home/howotouselinux/test.txt
>>> print(os.path.join(“/home”, “howotouselinux/test”,”test.txt”))
/home/howotouselinux/test/test.txt
os.path.join Example 3: Combining Multiple Paths and absolute path
If a path component represents an absolute path, then all previous components joined are discarded and joining continues from the absolute path component.
>>> print(os.path.join(“/home”, “howotouselinux”,”/test.txt”))
/test.txt
os.path.join Example 4: Combining Multiple Paths and ”
If the last path component to be joined is empty then a directory separator (‘/’) is put at the end.
>>> print(os.path.join(“/home”, “howotouselinux”,””))
/home/howotouselinux/
os.path.join Example 5: os.path.join + os.path.split
>>> p = os.path.join(os.getcwd(), ‘foo.txt’)
>>> p
‘/Users/csaftoiu/tmp/foo.txt’
>>> os.path.dirname(p)
‘/Users/csaftoiu/tmp’
>>> os.path.basename(p)
‘foo.txt’
>>> os.path.split(os.getcwd())
(‘/Users/csaftoiu/tmp’, ‘foo.txt’)
>>> os.path.splitext(os.path.basename(p))
(‘foo’, ‘.txt’)
David is a Cloud & DevOps Enthusiast. He has years of experience as a Linux engineer. He had working experience in AMD, EMC. He likes Linux, Python, bash, and more. He is a technical blogger and a Software Engineer. He enjoys sharing his learning and contributing to open-source.
howtouselinux.com is dedicated to providing comprehensive information on using Linux.
We hope you find our site helpful and informative.
Как прописать на Python путь к файлу в Windows, Mac и Linux
Одним из маленьких раздражителей в программировании является то, что путь к файлу в Microsoft Windows строится с использованием символа обратной косой черты между именами папок, в то время как почти все другие ОС используют прямую:
Путь к файлу в Windows: C:\some_folder\some_file.txt В большинстве других ОС: /some_folder/some_file.txt
Это случайность компьютерной истории начала 1980-х годов. В первой версии MS-DOS для указания параметров командной строки использовался символ прямой косой черты. Когда Microsoft добавила поддержку папок в MS-DOS 2.0, символ прямой косой черты был уже занят, поэтому вместо него использовалась обратная косая черта. Тридцать пять лет спустя мы по-прежнему сталкиваемся с этой несовместимостью.
Если вы хотите, чтобы ваш код на Python работал как на Windows, так и на Mac/Linux, вам придется решать подобные проблемы, связанные с конкретной платформой. К счастью, в Python 3 есть новый модуль pathlib , который делает работу с файлами практически безболезненной.
Давайте рассмотрим различные способы обработки путей к именам файлов и узнаем, как pathlib может сделать вашу жизнь лучше!
Неправильное решение: построить путь к файлу вручную
Допустим, у вас есть папка, содержащая файл, который вы хотите открыть в вашей программе Python:
Сделать так будет неправильно:
data_folder = "source_data/text_files/" file_to_open = data_folder + "raw_data.txt" f = open(file_to_open) print(f.read())
Обратите внимание, что я жестко закодировал путь к файлу, используя прямые слэши в стиле Unix, поскольку я работаю на Mac. Это разозлит пользователей Windows.
Технически этот код будет работать под Windows, потому что в Python есть хак, который распознает любой вид слэша, когда вы вызываете open() под Windows. Но полагаться на это не стоит. Если вы используете тип слэша, не подходящий для ОС, не все библиотеки Python будут работать, особенно если они взаимодействуют с внешними программами или библиотеками.
А поддержка Python для смешивания типов слэшей – это хак только для Windows, который не работает в обратном направлении. Использование обратных слешей в коде будет полностью провальным на Mac:
data_folder = "source_data\\text_files\\" file_to_open = data_folder + "raw_data.txt" f = open(file_to_open) print(f.read()) # На Mac этот код выбросит исключение: # FileNotFoundError: [Errno 2] No such file or directory: 'source_data\\text_files\\raw_data.txt'
По этим и другим причинам написание кода с жестко закодированными строками путей – это то, что заставит других программистов смотреть на вас с большим подозрением. В общем, нужно стараться избегать этого.
Старое решение: построить путь к файлу при помощи модуля os.path
Модуль os.path в Python имеет множество инструментов для решения ОС-специфичных проблем с файловой системой.
Вы можете использовать os.path.join() для построения строки пути, используя нужный вид слэша для текущей операционной системы:
import os.path data_folder = os.path.join("source_data", "text_files") file_to_open = os.path.join(data_folder, "raw_data.txt") f = open(file_to_open) print(f.read())
Этот код будет отлично работать как на Windows, так и на Mac. Проблема в том, что его сложно использовать. Выписывать os.path.join() и передавать каждую часть пути в виде отдельной строки – многословно и неинтуитивно.
Поскольку большинство функций в модуле os.path так же неудобны в использовании, разработчики часто “забывают” их использовать. Это приводит к множеству кроссплатформенных ошибок и недовольству пользователей.
Лучшее решение: использовать pathlib в Python 3
В Python 3.4 появилась новая стандартная библиотека с модулем pathlib для работы с файлами и путями – и это замечательно!
Теперь вам достаточно передать путь к файлу или его имя в новый объект Path() , используя прямые косые черты, а все остальное pathlib сделает сам:
from pathlib import Path data_folder = Path("source_data/text_files/") file_to_open = data_folder / "raw_data.txt" f = open(file_to_open) print(f.read())
Обратите внимание на два момента:
- С функциями pathlib нужно использовать прямые слэши. Объект Path() преобразует их в правильный вид слэша для текущей операционной системы. Отлично!
- Если вы хотите дополнить путь к файлу, можно использовать оператор / непосредственно в коде. Попрощайтесь с беспрестанным набором os.path.join(a, b) .
И даже если бы это было всё, на что способен pathlib , это уже было бы отличным дополнением к Python. Но этот модуль способен на большее!
Например, мы можем прочитать содержимое текстового файла, не возясь с его открытием и закрытием:
from pathlib import Path data_folder = Path("source_data/text_files/") file_to_open = data_folder / "raw_data.txt" print(file_to_open.read_text())
Фактически, pathlib делает большинство стандартных операций с файлами быстрыми и простыми:
from pathlib import Path filename = Path("source_data/text_files/raw_data.txt") print(filename.name) # Выводит "raw_data.txt" print(filename.suffix) # Выводит "txt" print(filename.stem) # Выводит "raw_data" if not filename.exists(): print("Oops, file doesn't exist!") else: print("Yay, the file exists!")
Вы даже можете использовать pathlib для явного преобразования пути Unix в путь в формате Windows:
from pathlib import Path, PureWindowsPath filename = Path("source_data/text_files/raw_data.txt") # Конвертировать путь в формат Windows path_on_windows = PureWindowsPath(filename) print(path_on_windows) # Вывод: # source_data\text_files\raw_data.txt
И если вы хотите действительно безопасно использовать обратные слеши в своем коде, вы можете объявить свой путь к файлу в формате Windows, и pathlib преобразует его для работы в текущей операционной системе:
from pathlib import Path, PureWindowsPath # Я явно объявил мой путь в формате Windows, чтобы использовать в нем прямые слэши. filename = PureWindowsPath("source_data\\text_files\\raw_data.txt") # Конвертировать путь в подходящий для текущей ОС формат correct_path = Path(filename) print(correct_path) # Выводит "source_data/text_files/raw_data.txt" на Mac и Linux # Выводит "source_data\text_files\raw_data.txt" на Windows
Проявив смекалку, можно использовать pathlib даже для разрешения относительных путей к файлам, разбора путей к сетевым ресурсам и генерации URL file://. Вот пример из всего пары строк кода, которые откроют локальный файл в вашем браузере:
from pathlib import Path import webbrowser filename = Path("source_data/text_files/raw_data.txt") webbrowser.open(filename.absolute().as_uri())
Это был лишь небольшой обзор pathlib . Этот модуль – отличная замена для множества различных функций, связанных с файлами, которые раньше были разбросаны по разным модулям Python. Проверьте!