Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Чтение данных из файлов ОС по относительным путям


Автор: cooluser 31.1.2007, 09:39
Всем привет!

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

** catalog1
*** python_module.py
*** catalog2
**** file_in_catalog2.txt

Т.е. внутри python_module.py есть такой код:
f=file("catalog2/file_in_catalog2.txt")

И это все прекрасно работает только тогда, когда python_module.py запускается из каталоге где он лежит, если текущий каталог какой-нибудь другой, то происходит ошибка при открытии файла, поскольку питон не может его найти.

Как это можно победить? т.е. чтобы путь в модуле стал действительно относительным и ни от чего не зависел

Добавлено @ 09:51 
Ну или другими словами, есть ли в питон функция, которая будучи вызвана внутри модуля, возвращает полный абсолютный путь до этого модуля, независимо от того, как и откуда он запускался?

Автор: Daevaorn 31.1.2007, 10:44
Цитата(cooluser @  31.1.2007,  10:39 Найти цитируемый пост)
Ну или другими словами, есть ли в питон функция, которая будучи вызвана внутри модуля, возвращает полный абсолютный путь до этого модуля, независимо от того, как и откуда он запускался? 

Стандартных вроде нет
Код

os.path.join( os.path.dirname( __file__ ), 'path/to/file' )

Автор: cooluser 31.1.2007, 11:50
Спасибо, здорово помог

Автор: sir_Jack 31.1.2007, 22:58
альтернативы: 

Код

os.path.abspath()
os.chdir()


также можно посмотреть что лежит в sys.argv[0] и впихнуть в os.chdir() в самом начале скрипта

Автор: Daevaorn 31.1.2007, 23:00
Цитата(sir_Jack @  31.1.2007,  23:58 Найти цитируемый пост)
также можно посмотреть что лежит в sys.argv[0]

а там не лежит разве путь к __main__ модулю?

Автор: sir_Jack 1.2.2007, 23:12
да

собственно команда os.chdir(sys.argv[0]) дает возможность считать все пути по директориям относительно скрипта
т.е. не надо впринципе использовать абсолютные пути smile особенно когда надо быстро что нить раскидать по директориям smile 

а вообще, где то я слышал что использовать os.chdir() при работе внутри скрипта и перемещению по диреткоряим - не слишком правильно smile  но не помню где я это слышал)

Автор: Daevaorn 1.2.2007, 23:46
Цитата(sir_Jack @  2.2.2007,  00:12 Найти цитируемый пост)
собственно команда os.chdir(sys.argv[0]) дает возможность считать все пути по директориям относительно скрипта

cкрипта, который запустили т.е. __main__, а автору нужно относительно не __main__ скрипта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)