Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение данных из файлов ОС по относительным путям, Чтение данных из файлов ОС по относитель 
:(
    Опции темы
cooluser
Дата 31.1.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Всем привет!

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

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

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

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

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

Добавлено @ 09:51 
Ну или другими словами, есть ли в питон функция, которая будучи вызвана внутри модуля, возвращает полный абсолютный путь до этого модуля, независимо от того, как и откуда он запускался?
PM MAIL   Вверх
Daevaorn
Дата 31.1.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



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

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

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

PM MAIL WWW   Вверх
cooluser
Дата 31.1.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Спасибо, здорово помог
PM MAIL   Вверх
sir_Jack
Дата 31.1.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 15.1.2007

Репутация: 3
Всего: 4



альтернативы: 

Код

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


также можно посмотреть что лежит в sys.argv[0] и впихнуть в os.chdir() в самом начале скрипта
PM MAIL   Вверх
Daevaorn
Дата 31.1.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



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

а там не лежит разве путь к __main__ модулю?
PM MAIL WWW   Вверх
sir_Jack
Дата 1.2.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 15.1.2007

Репутация: 3
Всего: 4



да

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

а вообще, где то я слышал что использовать os.chdir() при работе внутри скрипта и перемещению по диреткоряим - не слишком правильно smile  но не помню где я это слышал)
PM MAIL   Вверх
Daevaorn
Дата 1.2.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



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

cкрипта, который запустили т.е. __main__, а автору нужно относительно не __main__ скрипта
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.