2008-09-09 8 views
455

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

"C:/example/cwd/mydir/myfile.txt" 
+0

Аналогичный вопрос: https://stackoverflow.com/questions/7165 749/open-file-in-a-location-location-in-python – Raj 2017-10-12 21:10:21

ответ

641
>>> 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' 
+16

Примечание: на большинстве платформ это эквивалентно вызову функции `normpath()` следующим образом: `normpath (join (os.getcwd(), путь)) `. Поэтому, если `mydir/myfile.txt` не находится под` os.getcwd() `, абсолютный путь - это __not реальный путь__. – coanor 2014-11-25 04:15:58

+23

@coanor? Без явного корня `mydir/myfile.txt` неявно ссылается на путь внутри текущего рабочего каталога, поэтому он эквивалентен`./Mydir/myfile.txt`. Это может быть не путь, который вы намеревались ввести, но, насколько я могу судить, это кажется правильной интерпретацией пути. Не могли бы вы уточнить? – jpmc26 2015-01-08 22:46:08

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

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

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

Слишком плохо, что у них никогда не было подходящего модуля абстракции имени файла в stdlib. – 2008-09-26 12:08:04

+1

@ Торстен Марек: это больное и давнее упущение. – flow 2011-02-11 23:58:45

+4

Теперь они сделали для Python 3.4: `pathlib`. См. Мой ответ в этой теме. – twasbrillig 2014-10-24 01:20:54

10

Сегодня вы можете также использовать 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 
>>> 

Я бы рекомендовал использовать этот пакет, как это предлагает a clean interface to common os.path utilities.

42

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

Чтобы получить абсолютный путь в 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' 

Docs здесь: https://docs.python.org/3/library/pathlib.html

3

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

здесь как перечислять все типы файлов в текущей папке:

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) 

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

-2
filePath = os.path.abspath(directoryName) 
filePathWithSlash = filePath + "\\" 
filenameWithPath = os.path.join(filePathWithSlash, filename)