Форум сайта python.su
Всем доброго времени суток.
Я в питоне новичок. Очень понравился язык. Возможностей для оптимизации кода почти безграничны, особенно если учесть что я первый раз что то пишу на этом языке. Просьба помочь с оптимизацией и понять какие вещи я использовал не так, какие можно было заменить/ускорить/упростить и т.д. Написал модуль, который позволяет читать и сохранять настройки.
модуль я назвал его settings.py
"""Данный модуль предназанчен для работы с настройками
записывает/считывает файл настроек (имя файла настроек передается при
создании объекта по умолчанию "main.cfg").
Формат хранения настроек:
Ключ = Значение
Ключ = Значение
Имеется возможность получать как отдельные значения ключей по имени,
так и полностью читать весь файл настроек."""
import os
def read_file(path):
"""Читает настройки из указанного файла и возвращает словарь"""
fs = open(path)
st = []
for key_value in fs.read().replace(' ', '').split():
st.append(key_value.split('='))
fs.close()
return( dict(st) )
class settings():
"""При создании объекта, считывает конфигурационный файл и позволяет
во время работы основной программы обращаться за значениями настроек"""
settings = {}
path = ""
def __init__( self, path = "main.cfg" ):
self.path = path
if os.path.exists(path):
self.settings = read_file(path)
else:
os.mknod(path)
def write_settings( self, path, dict_sett):
"""Пишет в файл переданный словарь настроек"""
fs = open(path, 'w')
st = ''
for k,v in dict_sett.items():
st = st + ("%s=%s\n"%(k,v))
fs.write(st)
fs.close()
if __name__ == "__main__":
s = settings()
s.write_settings( s.path, s.settings) #'эти строки для теста, перед записью можно изменить значение какого нибудь ключа
rt=55555
we=3
rtuy=123
wert=2
twe=232
ry=1
etuy=3
wer=2
qwerqwe=rtrt
Офлайн
Я просто оставлю это сдесь…
from ConfigParser import ConfigParser
def dict_from_config_file(myini='config.ini', raw=False, vars=None):
"""Convert an INI file to a dictionary"""
config = ConfigParser()
config.read(myini)
result = {}
for section in config.sections():
if section not in result:
result[section] = {}
for option in config.options(section):
value = config.get(section, option, raw, vars)
result[section][option] = value
return result
def dict_to_config_file(myini='config.ini', raw=False, vars=None):
"""Convert an dictionary to a INI file"""
config = ConfigParser()
config.read(myini)
result = {}
for section in config.sections():
if section not in result:
result[section] = {}
for option in config.options(section):
value = config.get(section, option, raw, vars)
result[section][option] = value
return result
Офлайн
Хотелось бы внести уточнения. Вопрос изначально ставился не “помогите написать скрипт получения и записи настроек в файл”, а помогите оптимизировать код и выявить недостатки если они есть. А вариантов работы с настройками я тоже знаю не один. Вот может кого заинтересует. Работа еще проще чем в предыдущем посте.
from PyQt4 import QtGui, QtCore
# объект для сохранения настроек приложения:
self.settings = QtCore.QSettings('script-coding.info', 'milfoil')
#восстановление языковой настройки:
self.lang = self.settings.value('lang', QtCore.QVariant(u'milfoil_en_EN.qm')).toString()
Офлайн
dzamСамый важный недостаток - изобретение велосипеда. Приведеный мною код немного бредоватый но там есть очень важная строчка:
а помогите оптимизировать код и выявить недостатки если они есть
from ConfigParser import ConfigParser
Офлайн
knkd+1
Самый важный недостаток - изобретение велосипеда.
knkdПлюс комментарии в ini файле и прочее.
Ну ещё стандартный модуль может работать с секциями, но это кому как нравится.
dzamВообщем то knkd ответил на твой вопрос… Заменить, ускорить, упростить…
Просьба помочь с оптимизацией и понять какие вещи я использовал не так, какие можно было заменить/ускорить/упростить и т.д
Офлайн