Вопрос

Учитывая такой путь, как "mydir/myfile.txt", как мне найти абсолютный путь к файлу относительно текущего рабочего каталога в Python?Например.в Windows я мог бы получить:

"C:/example/cwd/mydir/myfile.txt"
Это было полезно?

Решение

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Также работает, если это уже абсолютный путь:

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Другие советы

Вы можете использовать новую библиотеку Python 3.4. pathlib.(Вы также можете получить его для Python 2.6 или 2.7, используя pip install pathlib.) Авторы написал:«Цель этой библиотеки — предоставить простую иерархию классов для обработки путей файловой системы и общих операций, которые пользователи выполняют над ними».

Чтобы получить абсолютный путь в Windows:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

Или в UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Документы здесь: https://docs.python.org/3/library/pathlib.html

>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>> 

А еще лучше установить модуль (находится на PyPI), он оборачивает все os.path функции и другие связанные функции в методы объекта, которые можно использовать везде, где используются строки:

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

Сегодня вы также можете использовать unipath пакет, основанный на path.py: http://sluggo.scrapping.cc/python/unipath/

>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>

Я бы рекомендовал использовать этот пакет, поскольку он предлагает чистый интерфейс для распространенных утилит os.path.

Обновление для Python 3.4+ pathlib это фактически отвечает на вопрос:

from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

Если вам нужна только временная строка, имейте в виду, что вы можете использовать Path объекты со всеми соответствующими функциями в os.path, в том числе, конечно abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Обратите внимание, что expanduser необходим (в Unix) в случае, если данное выражение для имени и местоположения файла (или каталога) может содержать ведущий ~/(тильда относится к домашнему каталогу пользователя) и expandvars заботится о любых других переменных среды (например, $HOME).

Я предпочитаю использовать glob

вот как составить список всех типов файлов в вашей текущей папке:

import glob
for x in glob.glob():
    print(x)

вот как вывести список всех (например) файлов .txt в текущей папке:

import glob
for x in glob.glob('*.txt'):
    print(x)

вот как составить список всех типов файлов в выбранном каталоге:

import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

надеюсь, это помогло вам

Модуль os предоставляет способ найти путь к абс.

НО большинство путей в Linux начинаются с ~ (тильда), что не дает удовлетворительного результата.

так что вы можете использовать srblib для этого.

>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'

установите его, используя python3 -m pip install srblib

https://pypi.org/project/srblib/

если ты на Mac

import os
upload_folder = os.path.abspath("static/img/users")

это даст вам полный путь:

print(upload_folder)

покажет следующий путь:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

Если кто-то использует Python и Linux и ищет полный путь к файлу:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

Этот всегда получает правильное имя файла текущего сценария, даже если он вызывается из другого сценария.Это особенно полезно при использовании subprocess.

import sys,os

filename = sys.argv[0]

оттуда вы можете получить полный путь к скрипту с помощью:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

Также упрощается навигация по папкам, просто добавляя /.. столько раз, сколько вы хотите подняться вверх в иерархии каталогов.

Чтобы получить CWD:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

Для родительского пути:

>>> os.path.abspath(filename+"/../..")
'/foo'

Объединив "/.." с другими именами файлов вы можете получить доступ к любому файлу в системе.

filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top