Найти - Пользователи
Полная версия: Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()
Начало » Python для новичков » Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()
1
Kamo
Приветствую.
Собственно сабж. Можете отнести вопрос к разряду праздного интереса, ибо результат выполнения первого и второго действия идентичны. Если я ошибаюсь, прошу поправить.
В чем же разница и почему я часто в коде вижу os.path.abspath(os.path.dirname('__file__'))
когда os.getcwd() выглядит эстетичнее?
doza_and
Это разные вещи. Первое директория в которой лежит скрипт, а второе текущая директроия.
Kamo
Я понимаю, что второе - это текущая рабочая директория (Current Workin Directory). Но мне не удалось добиться того, чтобы эти две вещи стали разными.

cd /home/user/
python

>>> import os
>>> os.path.abspath(os.path.dirname('__file__'))
'/home/user/'
>>> os.getcwd()
'/home/user/'
>>> os.chdir('/home/user/python/')
>>> os.path.abspath(os.path.dirname('__file__'))
'/home/user/python/'
>>> os.getcwd()
'/home/user/python/'

Вроде “скрипт” запущен из /home/user, но при смене текущей директории os.path.abspath(os.path.dirname('__file__')) выдает текущую рабочую директорию, а не директорию скрипта (вышеприведенный код я и в скрипт размещал).
Александр Кошелев
os.path.dirname('__file__') возвращает пустую строку, т.к. не знает что такое __file__. abspath от пустоты дает текущий cwd
Kamo
Ну вот, другое дело. Следовательно получаем, что разницы между os.path.abspath(os.path.dirname('__file__')) и os.getcwd() нет никакой.
reclosedev
Kamo
Следовательно получаем, что разницы между os.path.abspath(os.path.dirname('__file__')) и os.getcwd() нет никакой.
Речь точно о строке ‘__file__’, а не о переменной __file__? Разница все-таки есть.
os.path.abspath(os.path.dirname(__file__))
doza_and
import os
print os.path.abspath(os.path.dirname(__file__)) 
print os.getcwd()
os.chdir("..")
print os.path.abspath(os.path.dirname(__file__)) 
print os.getcwd()
c:\work\fem
c:\work\fem
c:\work\fem
c:\work
Kamo
reclosedev
Речь точно о строке ‘__file__’, а не о переменной __file__? Разницавсе-таки есть.

Видимо речь о строке, т.к.
NameError: name ‘__file__’ is not defined
cutwater
Kamo
NameError: name ‘__file__’ is not defined

Видимо таки нет, потому что судя по всему Вы пытаетесь обратиться к __file__ из интерактивного режима python. А теперь попробуйте то же самое проделать в файле и запустить его.

И когда ж люди начнут документацию читать :(
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB