Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 1, 2012 22:26:52

Kamo
Зарегистрирован: 2012-12-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

Приветствую.
Собственно сабж. Можете отнести вопрос к разряду праздного интереса, ибо результат выполнения первого и второго действия идентичны. Если я ошибаюсь, прошу поправить.
В чем же разница и почему я часто в коде вижу os.path.abspath(os.path.dirname('__file__'))
когда os.getcwd() выглядит эстетичнее?

Офлайн

#2 Дек. 1, 2012 23:11:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

Это разные вещи. Первое директория в которой лежит скрипт, а второе текущая директроия.



Отредактировано doza_and (Дек. 1, 2012 23:11:36)

Офлайн

#3 Дек. 2, 2012 17:21:47

Kamo
Зарегистрирован: 2012-12-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

Я понимаю, что второе - это текущая рабочая директория (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__')) выдает текущую рабочую директорию, а не директорию скрипта (вышеприведенный код я и в скрипт размещал).

Отредактировано Kamo (Дек. 2, 2012 17:22:29)

Офлайн

#4 Дек. 2, 2012 17:29:39

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

os.path.dirname('__file__') возвращает пустую строку, т.к. не знает что такое __file__. abspath от пустоты дает текущий cwd



Офлайн

#5 Дек. 2, 2012 17:41:25

Kamo
Зарегистрирован: 2012-12-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

Ну вот, другое дело. Следовательно получаем, что разницы между os.path.abspath(os.path.dirname('__file__')) и os.getcwd() нет никакой.

Офлайн

#6 Дек. 2, 2012 18:22:23

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

Kamo
Следовательно получаем, что разницы между os.path.abspath(os.path.dirname('__file__')) и os.getcwd() нет никакой.
Речь точно о строке ‘__file__’, а не о переменной __file__? Разница все-таки есть.
os.path.abspath(os.path.dirname(__file__))

Офлайн

#7 Дек. 2, 2012 20:40:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

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



Офлайн

#8 Дек. 2, 2012 20:55:18

Kamo
Зарегистрирован: 2012-12-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

reclosedev
Речь точно о строке ‘__file__’, а не о переменной __file__? Разницавсе-таки есть.

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

Отредактировано Kamo (Дек. 2, 2012 20:56:58)

Офлайн

#9 Дек. 2, 2012 22:15:40

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Разница между os.path.abspath(os.path.dirname('__file__')) и os.getcwd()

Kamo
NameError: name ‘__file__’ is not defined

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

И когда ж люди начнут документацию читать :(



Отредактировано cutwater (Дек. 2, 2012 22:16:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version