INI-Datei überprüfen
Verfasst: Sonntag 6. Dezember 2015, 03:25
Hallo Leute, ich habe ein kleines Problem. Die Fehlermeldung, die ich jedesmal erhalte, seht ihr am Ende des Themas.
Um etwas Übersicht zu bekommen: Ich habe zwei Funktionen geschrieben, einmal generate_constants_sections_options und einmal check_setions_options. In der ersten Funktion habe ich zunächst zwei Wörterbücher erstellt. Ein Wörterbuch, in welches nur Bereiche (Sectione) untergebracht werden, und ein Wörterbuch, in welcher Optionen gesammelt werden. Im nächsten Schritt habe ich zwei Listen erstellt. In section_general_list werden Bereiche und Optionen zueinander kombiniert. Genauso verhält es sich mit section_gui_list . Auf diese Weise weiß ich dann, welche Optionen zu welchen Bereichen gehören. Nun habe ich zwei leere Wörterbücher stellt, die mit Hilfe der zwei darauf folgenden For-Schleifen entsprechend gefüllt werden.
Mein Ziel ist es, dass ich in der check_setions_options()-Funktion die Bereiche, und die dazugehörigen Optionen dazu nutzen möchte, um zu überprüfen, ob die Bereiche überhaupt gibt, und ob es in den Bereichen auch die Optionen gibt. Kurz: Ich möchte meine INI-Datei überprüfen, ob die Bereiche und die dazugehörigen Optionen vorhanden sind. Beim Ausführungen bekomme ich die Fehlermeldung, dass 'list' die Methode 'lower' nciht kennt. Nun frage ich mich, was ich hier falsch mache?
So sieht meine derzeitige *.ini-Datei aus. Um zu testen, habe ich den Inhalt meiner Datei als Zitat hinzugefügt.
Um etwas Übersicht zu bekommen: Ich habe zwei Funktionen geschrieben, einmal generate_constants_sections_options und einmal check_setions_options. In der ersten Funktion habe ich zunächst zwei Wörterbücher erstellt. Ein Wörterbuch, in welches nur Bereiche (Sectione) untergebracht werden, und ein Wörterbuch, in welcher Optionen gesammelt werden. Im nächsten Schritt habe ich zwei Listen erstellt. In section_general_list werden Bereiche und Optionen zueinander kombiniert. Genauso verhält es sich mit section_gui_list . Auf diese Weise weiß ich dann, welche Optionen zu welchen Bereichen gehören. Nun habe ich zwei leere Wörterbücher stellt, die mit Hilfe der zwei darauf folgenden For-Schleifen entsprechend gefüllt werden.
Mein Ziel ist es, dass ich in der check_setions_options()-Funktion die Bereiche, und die dazugehörigen Optionen dazu nutzen möchte, um zu überprüfen, ob die Bereiche überhaupt gibt, und ob es in den Bereichen auch die Optionen gibt. Kurz: Ich möchte meine INI-Datei überprüfen, ob die Bereiche und die dazugehörigen Optionen vorhanden sind. Beim Ausführungen bekomme ich die Fehlermeldung, dass 'list' die Methode 'lower' nciht kennt. Nun frage ich mich, was ich hier falsch mache?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import ConfigParser
import os
config_setting = ConfigParser.SafeConfigParser()
def generate_constants_sections_options():
dict_sections = {"SECTION_GENERAL": "General_Configuration",
"SECTION_GUI": "General_Design",
}
dict_options = {"OPTION_LANGUAGE": "language",
"OPTION_DATABASE_TYPE": "database_type",
"OPTION_ASK_BEFORE_CLOSE": "ask_befor_close",
"OPTION_DIR_PATH_TEMP_FOLDER": "dir_path_temp_folder",
"OPTION_URL_UPDATE": "url_update",
"OPTION_TIME_OUT_UPDATE": "time_out_update",
"OPTION_URL_VERSION": "url_version",
"OPTION_LAST_FOLDER_PATH_REMEMBER": "last_folder_path_remeber",
"OPTION_LOG_FOLDER_PATH": "log_folder_path",
"OPTION_GUI_STYLE": "gui_style",
"OPTION_SCHEME_COLOR": "scheme_color"
}
section_general_list = [
[dict_sections["SECTION_GENERAL"], dict_options["OPTION_LANGUAGE"]],
[dict_sections["SECTION_GENERAL"], dict_options["OPTION_DATABASE_TYPE"]],
[dict_sections["SECTION_GENERAL"], dict_options["OPTION_DIR_PATH_TEMP_FOLDER"]],
[dict_sections["SECTION_GENERAL"], dict_options["OPTION_URL_UPDATE"]],
[dict_sections["SECTION_GENERAL"], dict_options["OPTION_TIME_OUT_UPDATE"]],
[dict_sections["SECTION_GENERAL"], dict_options["OPTION_LAST_FOLDER_PATH_REMEMBER"]]
]
section_gui_list = [
[dict_sections["SECTION_GUI"], dict_options["OPTION_GUI_STYLE"]],
[dict_sections["SECTION_GUI"], dict_options["OPTION_SCHEME_COLOR"]]
]
dict_sections_general = {}
dict_sections_gui = {}
for key, val in section_general_list:
'''
The magic of setdefault is that it initializes
the value for that key if that key is not defined,
otherwise it does nothing. Now, noting that setdefault
returns the key you can combine these into a single line:
'''
dict_sections_general.setdefault(key, []).append(val)
for key_1, val_1 in section_gui_list:
dict_sections_gui.setdefault(key_1, []).append(val_1)
return dict_sections_general, dict_sections_gui
def check_setions_options(ini_path):
'''
First, its necessary to get all generated sections and options.
All generated sections and options are saved in the variables (sec_opt_gen) and (sec_opt_gui ).
'''
sec_opt_gen, sec_opt_gui = generate_constants_sections_options()
print "SECTION_OPTION_GENERAL", sec_opt_gen
print "SECTION_OPTION_GUI", sec_opt_gui
'''
This empty list was created for sections
that exists and that are correct. All existing
and correct sections are added to this list.
'''
'''
Open and read the ini-file. The open file are saved in
the variable (open_ini). In this way you can later access
the object - for example to close it later.
'''
open_ini = config_setting.read(ini_path)
'''
Iterate over the dictionary, especially the values: result.values().
'''
for candidate_section_gen in sec_opt_gen.keys():
print '(%s) section exists: %s' % (candidate_section_gen, config_setting.has_section(candidate_section_gen))
for candidate_option_gen in sec_opt_gen.values():
print '%s.%-12s : %s' % (candidate_section_gen, candidate_option_gen, config_setting.has_option(candidate_section_gen, candidate_option_gen))
for candidate_section_gui in sec_opt_gui.keys():
print '(%s) section exists: %s' % (candidate_section_gui, config_setting.has_section(candidate_section_gui))
for candidate_option_gui in sec_opt_gui.values():
print '%s.%-12s : %s' % (candidate_section_gui, candidate_option_gui, config_setting.has_option(candidate_section_gui, candidate_option_gui))
open_ini.close()
if __name__ == "__main__":
path_to_ini_file = raw_input("Enter Path: ")
check_setions_options(path_to_ini_file)So sieht meine derzeitige *.ini-Datei aus. Um zu testen, habe ich den Inhalt meiner Datei als Zitat hinzugefügt.
Fehlermeldung:[General_Configuration]
language =
database_type =
ask_befor_close =
dir_path_temp_folder =
url_update =
time_out_update =
url_version =
last_folder_path_remeber =
log_folder_path =
[General_Design]
gui_style =
scheme_color =
Traceback (most recent call last):
File "D:/Dan/Python/xarphus/examples/iterate_over_values.py", line 96, in <module>
check_setions_options(path_to_ini_file)
File "D:/Dan/Python/xarphus/examples/iterate_over_values.py", line 87, in check_setions_options
print '%s.%-12s : %s' % (candidate_section_gen, candidate_option_gen, config_setting.has_option(candidate_section_gen, candidate_option_gen))
File "C:\Python27\lib\ConfigParser.py", line 384, in has_option
option = self.optionxform(option)
File "C:\Python27\lib\ConfigParser.py", line 374, in optionxform
return optionstr.lower()
AttributeError: 'list' object has no attribute 'lower'