Odpowiedzi:
Kluczem jest tutaj nameatrybut fobiektu reprezentującego otwarty plik. Otrzymujesz to w ten sposób:
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'
Czy to pomaga?
tempfilemodułu, zwłaszcza dla tempfile.NamedTemporaryFile, tuż poniżej wspomnianej dokumentacji tempfile.TemporaryFile. Jest to specyficzny przypadek dla pliku tymczasowego i, jak widać w dokumentacji, istnieje już rozwiązanie. tempfile.TemporaryFilenie jest przeznaczone do użycia w przypadku, gdy chcesz odczytać nazwę.
f = open('some/relative/path'), a następnie zmienisz katalog roboczy, na przykład os.chdir('somewhere/esle'), f.namenie zaktualizuje się odpowiednio i nie będzie miało sensu w twoim bieżącym katalogu roboczym.
Miałem dokładnie ten sam problem. Jeśli używasz ścieżki względnej, os.path.dirname (ścieżka) zwróci tylko ścieżkę względną. os.path.realpath załatwia sprawę :
>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)
os.path.realpathzwróci „~ / text.txt” zamiast „~ / Documents / text.txt”.
A jeśli chcesz tylko uzyskać nazwę katalogu i nie potrzebujesz dołączonej do niego nazwy pliku, możesz to zrobić w następujący konwencjonalny sposób za pomocą osmodułu Python.
>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'
W ten sposób możesz przejąć strukturę katalogów.
f = open('febROSTER2012.xls'). Jak dotrzeć do pełnej ścieżki?
Możesz to również uzyskać w ten sposób.
filepath = os.path.abspath(f.name)
tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')nie działa!