Python сравнить файлы конфигурации

Наиболее распространенные профили рабочих мест, есть четыре: ключ = значение общего конфигурационного файла, файл конфигурация отформатирован Json, конфигурации файлов формата HTML и профиль YMAML.

Среди первого большинства, последние три являются более распространенными в зрелых продуктов с открытым исходным кодом, эта статья только для первого профиля.

Предоставляет общий дифф оболочки Linux команду для сравнения класса конфигурационных файлов в виде обычного текст, difflib Python также обеспечивает сравнение StR и HTML-интерфейсы, но реальный проект этих инструментов на самом деле не так просто, в основном из-за нашу конфигурацию стандартизация файлов не унифицированы.

Для решения таких проблем, то лучше написать специальный инструмент для сравнения файлов конфигурации для конкретного проекта, так что, когда релиз будет очень полезно.

Другие слова ленивых сказать, непосредственно присоединенные к коду:

#! / USR / бен / Python 
# Coding = UTF-8 

«» ' 
Этот сценарий адаптирован для сравнения ключа профиля = формат значения 
использовать путь: 
config_match.py old_file new_file в 
конечном итоге будет добавлен к новому элементу конфигурации в new_file old_file в, old_file в существующих элементах конфигурации не вносить никаких изменений. 
'' ' 

Импорт Re 
Import OS, SYS 
перезарядка (SYS) 
sys.setdefaultencoding ( "UTF - 8") . 

Old_file в sys.argv = [1.] 
New_file = в sys.argv [2] 

DEF list2dict (Файл): 
    с Open (Файл, «R & л») AS F: 
    	список f.readlines = () 
    # список перемещения ул и исключить пустые строки , начинающиеся с # ул, ул элементы , используемые для разделения в [K, V] элемент 
    для е в списке [0:] : 
    	IF re.match ( '^ #', Е) или re.match ( '^ $', E): 
	    list.remove (E) 
    I = 0 
    для Е в списке: 
	e_split = e.strip () Split ( '='.
	(E_split) == 2 Len ЕСЛИ: 
	    . K, V = e.strip () Split ( '=') 
    	    список [I] = [K, V] 
	еще: 
	    Pass 
	I = I + 1. 
    # Пункт в списке становится [[ K, V], [к, v], ...] такой список 
    # номер содержит или содержит множество = Cl = число будет проигнорировано, следует отметить , что это 
    возвращение ДИКТ (Список) 

old_dict = list2dict (old_file ) 
new_dict = list2dict (new_file) 

«» ' , 
чтобы пройти новый конфигурационный файл, добавьте conf_need_added {} был добавлен элемент словарь конфигурации, то словарь conf_need_added {} к = V для добавления старого формата файл. 
Если повторяющиеся ключевые значения должны быть обновлены было бы слишком просто, тип ДИКТ поставляется с методом обновления () может быть очень хорошим , чтобы выполнить поставленную задачу, поэтому нет необходимости , чтобы бросить. 
'' ' 
Conf_need_added = {} 
для K, V в new_dict.items (): 
    Если K Не в old_dict.keys (): 
		conf_need_added [K] = V 
    остальное: 
		Pass

Открыть с помощью (old_file, 'А') AS F: 
    для K, V в conf_need_added.items ():
		f.write ( '\ п # Здесь новые элементы конфигурации: \ н-') 
		f.write (СТР (К) + '=' + STR (V) + \ н- ')

 

рекомендация

отwww.cnblogs.com/leohahah/p/10984574.html