Форум сайта python.su
0
configfilename = 'config.ini' cfgfile = open(os.getcwd() + '\\' + configfilename)
Отредактировано agryn (Сен. 11, 2012 17:41:43)
Офлайн
173
http://docs.python.org/library/os.path.html#os.path.join
А вообще, если файл лежит в каталоге со скриптом, и скрипт запускается из него, то
cfgfile = open(configfilename)
Офлайн
52
__file__
os.path.abspath
А вообще есть такая вещь как settings.py/config.py, всё делается просто импортом.
Офлайн
32
Тут можно взять “правильный” слеш:
>>> import os >>> os.sep '/'
Офлайн
72
configfilename = 'config.ini' cfgfile = open(os.path.join(os.path.dirname(__file__), configfilename))
Офлайн
72
fata1exСисадмины вас проклянут. Вот в большинстве php cms конфиги сделаны таким импортом, понадобилось утильку написать - данные из конфигов извлекать, так единственный выход был вызывать php из консоли, в нем исполнять скрипт, что импортирует конфиг и печатает в виде JSON на экран, потом вывод парсить, уууууу….
А вообще есть такая вещь как settings.py/config.py, всё делается просто импортом.
Офлайн
14
PooHconfigfilename = 'config.ini' cfgfile = open(os.path.join(os.path.dirname(__file__), configfilename))
o7412369815963Вопрос в догонку - а можно ли в конфигах сохранять пути с сепаратором, или надо мудрячить с os.path.join? А \ на линупсе будет работать?
а вообще вроде под виндой питон нормально работает с “/” (как и в nix/mac), на py 2,6 проверял, но лучше юзать os.sep
Офлайн
173
odnochlenНе знаю самый ли корректный, но делаю так:
Я читал, что __file__ не везде работает. И что лучше - dirname или abspath? Какой самый корректный вариант открытия файлов в каталоге програмы?
import os import sys def program_path(): main_file = unicode(sys.argv[0], sys.getfilesystemencoding()) return os.path.realpath(os.path.dirname(main_file))
odnochlenНаверное, лучше сохранять с прямым слэшем, а потом на крайний случай использовать os.path.normpath(path)
Вопрос в догонку - а можно ли в конфигах сохранять пути с сепаратором, или надо мудрячить с os.path.join
os.path.normpath(path)
Normalize a pathname. This collapses redundant separators and up-level references so that A//B, A/B/, A/./B and A/foo/../B all become A/B.
It does not normalize the case (use normcase() for that). On Windows, it converts forward slashes to backward slashes. It should be understood that this may change the meaning of the path if it contains symbolic links!
odnochlenнет
А \ на линупсе будет работать?
ubuntu@devbox:~$ python
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open(r"tmp\test.txt")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'tmp\\test.txt'
>>> f = open(r"tmp/test.txt")
>>> f
<open file 'tmp/test.txt', mode 'r' at 0xb73dfe38>
Отредактировано reclosedev (Сен. 13, 2012 17:40:32)
Офлайн
20
Еще DOS прекрасно работал с ‘/’.
Так же как и все соответсвующие WinAPI.
004011C8 . 68 00000080 PUSH 80000000 ; |Access = GENERIC_READ
004011CD . 68 75384000 PUSH test.00403875 ; |FileName = "D:/temp/test/test.mpt"
004011D2 . E8 A7090000 CALL <JMP.&kernel32.CreateFileA> ; \CreateFileA

Офлайн