Получить путь из открытого файла в Python


113

Если у меня есть открытый файл, есть ли osвызов для получения полного пути в виде строки?

f = open('/Users/Desktop/febROSTER2012.xls')

Откуда fмне получить "/Users/Desktop/febROSTER2012.xls"?

Ответы:


145

Ключевым моментом здесь является nameатрибут fобъекта, представляющего открытый файл. Вы понимаете это так:

>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'

Помогает?


4
Для файлов, созданных: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')не работает!
Виктор

19
@Victor: пожалуйста, прочтите документацию tempfileмодуля, особенно для упомянутой вами tempfile.NamedTemporaryFileдокументации tempfile.TemporaryFile. Это особый случай для временного файла, и, как видно из документации, решение уже существует. tempfile.TemporaryFileне предназначен для использования в случае, если вы хотите прочитать имя.
Tadeck

12
Если вы создаете файл с помощью open ('foo.txt', 'w'), а затем выполняете f.name, он предоставляет вам только вывод foo.txt
searchchengine27

Zans предлагает решение, которое работает и для относительных путей. Смотрите его ответ ниже.
Маркус

1
Имейте в виду, что если вы используете относительный путь, например f = open('some/relative/path'), а затем измените рабочий каталог, например os.chdir('somewhere/esle'), то f.nameон не будет обновляться соответствующим образом и не будет иметь смысла в вашем текущем рабочем каталоге.
user986730

96

У меня была такая же проблема. Если вы используете относительный путь, os.path.dirname (path) вернет только относительный путь. os.path.realpath делает свое дело:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)

15
На самом деле это настоящий ответ.
BlueTrin,

2
Это работает, только если относительный путь к файлу по-прежнему является правильным путем. Если я укажу имя файла как 'text.txt' из каталога '~ / Documents /', а затем изменю каталог на '~ /', os.path.realpathвернет '~ / text.txt' вместо '~ / Documents / text.txt'.
К. Нильсон

1
Я заметил проблему с realpath. Он не исправляет регистр буквенных символов файлов, а сохраняет регистр, используемый в операторе open. Я надеялся, что он вернет имя файла, которое действительно существует в файловой системе. (Это, конечно же, Windows)
RufusVS

12

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

>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'

Таким образом, вы можете получить структуру каталогов.


Это возвращает пустую строку, если вы используете f = open('febROSTER2012.xls'). Как пройти полный путь?
NZD

3

Вы можете получить это и так.

filepath = os.path.abspath(f.name)

3
Это добавит его в текущий рабочий каталог, а не в каталог, в котором он фактически находится.
Bachsau
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.