Ответы:
>>> 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'
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, которые настаивают на пути, существующем со стандартной функцией разрешения пути, являются трудной задачей.
relpathpathrelpath
Вы можете использовать новую библиотеку 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
os.path.abspath()дало мне ошибку: AttributeError: 'NoneType' object has no attribute 'startswith'использование Path().resolve()не с тем же относительным путем к файлу. (Linux и Python3.4)
Более того, установите модуль (найден на PyPI), он оборачивает все os.pathфункции и другие связанные функции в методы объекта, который можно использовать везде, где используются строки:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib. Смотрите мой ответ в этой теме.
from path import PathзатемPath('mydir/myfile.txt').abspath()
pathмодуль. Связанный модуль использует класс с именем path.
Сегодня вы также можете использовать 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).
Это всегда возвращает правильное имя файла текущего скрипта, даже если он вызывается из другого скрипта. Это особенно полезно при использовании 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'
Комбинируя "/.."с другими именами файлов, вы можете получить доступ к любому файлу в системе.
Модуль 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
Я предпочитаю использовать 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.path.abspath()) к любому относительному пути, glob
если ты на маке
import os
upload_folder = os.path.abspath("static/img/users")
это даст вам полный путь:
print(upload_folder)
покажет следующий путь:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user