Schließen der Datei geöffnet von ConfigParser
-
13-09-2019 - |
Frage
Ich habe folgende Möglichkeiten:
config = ConfigParser()
config.read('connections.cfg')
sections = config.sections()
Wie kann ich schließen Sie die Datei mit config.read
geöffnet?
In meinem Fall als neue Abschnitte / Daten in die config.cfg
Datei hinzugefügt werden, ich meine wxtree Widget aktualisieren. Es ist jedoch nur einmal aktualisiert, und ich vermute, es ist, weil config.read
die Datei offen läßt.
Und wenn wir schon dabei sind, was ist der Hauptunterschied zwischen ConfigParser
und RawConfigParser
?
Lösung
Verwenden Sie readfp statt lesen:
with open('connections.cfg') as fp:
config = ConfigParser()
config.readfp(fp)
sections = config.sections()
Andere Tipps
ConfigParser.read(filenames)
tatsächlich kümmert sich um das für Sie.
Während Codierung Ich habe dieses Problem gestoßen und fand ich selbst genau die gleiche Frage:
im Grunde Lesen bedeutet, dass ich auch diese Ressource zu schließen, nachdem ich mit ihm fertig bin, nicht wahr?
las ich die Antwort, die Sie hier was darauf hindeutet, bekamen die Datei selbst zu öffnen und config.readfp(fp)
als Alternative zu verwenden. Ich schaute auf der Dokumentation und sah, dass in der Tat gibt es keinen ConfigParser.close()
ist. Also habe ich recherchiert ein wenig mehr und lesen Sie die ConfigParser Code-Implementierung selbst:
def read(self, filenames):
"""Read and parse a filename or a list of filenames.
Files that cannot be opened are silently ignored; this is
designed so that you can specify a list of potential
configuration file locations (e.g. current directory, user's
home directory, systemwide directory), and all existing
configuration files in the list will be read. A single
filename may also be given.
Return list of successfully read files.
"""
if isinstance(filenames, basestring):
filenames = [filenames]
read_ok = []
for filename in filenames:
try:
fp = open(filename)
except IOError:
continue
self._read(fp, filename)
fp.close()
read_ok.append(filename)
return read_ok
Dies ist die eigentliche read()
Methode von ConfigParser.py Quellcode. Wie Sie, 3. Zeile von unten sehen kann, schließt fp.close()
die geöffnete Ressource nach seiner Verwendung in jedem Fall. Dies wird Ihnen angeboten, enthalten bereits in der Box mit ConfigParser.read ():)
Der Unterschied zwischen ConfigParser
und RawConfigParser
ist, dass ConfigParser
versuchen wird, auf „magische Weise“ Verweise auf andere Konfigurationsvariablen zu erweitern, etwa so:
x = 9000 %(y)s
y = spoons
In diesem Fall wird x
9000 spoons
werden und y
wird nur spoons
werden. Wenn Sie diese Erweiterung Funktion benötigen, empfehlen die docs, dass Sie stattdessen SafeConfigParser
verwenden. Ich weiß nicht, was exatly der Unterschied zwischen den beiden ist. Wenn Sie nicht die Erweiterung benötigen (Sie wahrscheinlich nicht) nur RawConfigParser
müssen.
Ihr Verdacht Um zu testen, verwenden Sie ConfigParser.readfp () und selbst das Öffnen und Schließen der Datei verarbeiten. Machen Sie den readfp
Anruf, nachdem die Änderungen vorgenommen werden.
config = ConfigParser()
#...on each change
fp = open('connections.cfg')
config.readfp(fp)
fp.close()
sections = config.sections()