Учитывая путь, такой как "mydir/myfile.txt"
, как мне найти абсолютный путь файла относительно текущего рабочего каталога в Python? Например, на Windows, я мог бы в конечном итоге:
"C:/example/cwd/mydir/myfile.txt"
Учитывая путь, такой как "mydir/myfile.txt"
, как мне найти абсолютный путь файла относительно текущего рабочего каталога в Python? Например, на Windows, я мог бы в конечном итоге:
"C:/example/cwd/mydir/myfile.txt"
Ответы:
Также работает, если это уже абсолютный путь:
источник
normpath()
следующим образом :normpath(join(os.getcwd(), path))
. Так что, еслиmydir/myfile.txt
не подos.getcwd()
, абсолютный путь не является реальным путем .mydir/myfile.txt
неявно ссылается на путь в текущем рабочем каталоге, который, следовательно, эквивалентен./mydir/myfile.txt
. Возможно, это не тот путь, который вы намеревались ввести, но, насколько я могу судить, это похоже на правильную интерпретацию пути. Не могли бы вы уточнить?abspath
функции и реальным файлом. Вы могли бы указать любые пути-несуществующие файлы и каталоги в порядке, и abspath просто разрешит биты пути (включая..
элемент родительского каталога " ") и вернет строку. Это просто строка, вычисленная из текущего каталога; кажется, что любая корреляция с реальным файлом является случайной. Попробуйos.path.abspath("/wow/junk/../blha/hooey")
. Оно работает.os.path.exists
. Наоборот, такие системы, как PowerShell, которые настаивают на пути, существующем со стандартной функцией разрешения пути, являются трудной задачей.relpath
path
relpath
Вы можете использовать новую библиотеку Python 3.4
pathlib
. (Вы также можете получить его для Python 2.6 или 2.7, используяpip install pathlib
.) Авторы написали : «Цель этой библиотеки - предоставить простую иерархию классов для обработки путей файловой системы и общих операций, которые пользователи выполняют над ними».Чтобы получить абсолютный путь в Windows:
Или в UNIX:
Документы находятся здесь: https://docs.python.org/3/library/pathlib.html
источник
os.path.abspath()
дало мне ошибку:AttributeError: 'NoneType' object has no attribute 'startswith'
использованиеPath().resolve()
не с тем же относительным путем к файлу. (Linux и Python3.4)Более того, установите модуль (найден на
PyPI
), он оборачивает всеos.path
функции и другие связанные функции в методы объекта, который можно использовать везде, где используются строки:источник
pathlib
. Смотрите мой ответ в этой теме.from path import Path
затемPath('mydir/myfile.txt').abspath()
path
модуль. Связанный модуль использует класс с именемpath
.Сегодня вы также можете использовать
unipath
пакет, основанный наpath.py
: http://sluggo.scrapping.cc/python/unipath/Я бы порекомендовал использовать этот пакет, поскольку он предлагает чистый интерфейс для общих утилит os.path .
источник
Обновление для Python 3.4+,
pathlib
которое фактически отвечает на вопрос:Если вам нужна только временная строка, имейте в виду, что вы можете использовать
Path
объекты со всеми соответствующими функциямиos.path
, включая, конечноabspath
:источник
Обратите внимание, что
expanduser
это необходимо (в Unix) в случае, если данное выражение для имени файла (или каталога) и местоположения может содержать~/
начальный символ (тильда относится к домашнему каталогу пользователя) иexpandvars
заботится о любых других переменных среды (например$HOME
).источник
Это всегда возвращает правильное имя файла текущего скрипта, даже если он вызывается из другого скрипта. Это особенно полезно при использовании
subprocess
.оттуда вы можете получить полный путь к скрипту:
Это также упрощает навигацию по папкам, просто добавляя
/..
столько раз, сколько вы хотите, чтобы перейти вверх по иерархии каталогов.Чтобы получить cwd:
Для родительского пути:
Комбинируя
"/.."
с другими именами файлов, вы можете получить доступ к любому файлу в системе.источник
Модуль
os
предоставляет способ найти путь пресса.НО большинство путей в Linux начинаются с
~
(тильды), что не дает удовлетворительного результата.так что вы можете использовать
srblib
для этого.установить его с помощью
python3 -m pip install srblib
https://pypi.org/project/srblib/
источник
Я предпочитаю использовать glob
Вот как можно перечислить все типы файлов в текущей папке:
Вот как перечислить все (например) файлы .txt в вашей текущей папке:
Вот как можно перечислить все типы файлов в выбранной директории:
надеюсь, это помогло тебе
источник
os.path.abspath()
) к любому относительному пути,glob
если ты на маке
это даст вам полный путь:
покажет следующий путь:
источник
Если кто-то использует Python и Linux и ищет полный путь к файлу:
источник