Ответы:
Ключевым моментом здесь является nameатрибут fобъекта, представляющего открытый файл. Вы понимаете это так:
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'
Помогает?
tempfileмодуля, особенно для упомянутой вами tempfile.NamedTemporaryFileдокументации tempfile.TemporaryFile. Это особый случай для временного файла, и, как видно из документации, решение уже существует. tempfile.TemporaryFileне предназначен для использования в случае, если вы хотите прочитать имя.
f = open('some/relative/path'), а затем измените рабочий каталог, например os.chdir('somewhere/esle'), то f.nameон не будет обновляться соответствующим образом и не будет иметь смысла в вашем текущем рабочем каталоге.
У меня была такая же проблема. Если вы используете относительный путь, os.path.dirname (path) вернет только относительный путь. os.path.realpath делает свое дело:
>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)
os.path.realpathвернет '~ / text.txt' вместо '~ / Documents / text.txt'.
И если вы просто хотите получить имя каталога, а не имя файла, идущее с ним, вы можете сделать это следующим обычным способом, используя osмодуль Python.
>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'
Таким образом, вы можете получить структуру каталогов.
f = open('febROSTER2012.xls'). Как пройти полный путь?
Вы можете получить это и так.
filepath = os.path.abspath(f.name)
tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')не работает!