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?

War es hilfreich?

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top