15

私は次のものを持っています:

config = ConfigParser()
config.read('connections.cfg')
sections = config.sections()

で開いたファイルを閉じるにはどうすればよいconfig.readですか?

私の場合、新しいセクション/データがconfig.cfgファイルに追加されると、wxtree ウィジェットを更新します。ただし、更新は1回だけでconfig.read、ファイルを開いたままにしておくためだと思います。

ConfigParserそして、私たちがそれに取り組んでいる間、 との主な違いは何RawConfigParserですか?

4

4 に答える 4

33

ConfigParser.read(filenames)実際にそれを処理します。

コーディング中にこの問題に遭遇し、まったく同じ質問を自問していることに気付きました。

読むということは、基本的に、読み終わったらこのリソースを閉じなければならないということですよね?

ここで得た回答を読んで、ファイルを自分で開き、config.readfp(fp)代わりに使用することを提案しました。私はドキュメンテーションを見て、実際には存在しないことを見ましたConfigParser.close()。そこで、もう少し調べて、ConfigParser コードの実装自体を読みました。

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

read()これはConfigParser.py ソース コードからの実際のメソッドです。ご覧のとおり、下から 3 行目は、fp.close()使用後に開いているリソースを閉じます。これは提供され、すでに ConfigParser.read() のボックスに含まれています :)

于 2013-05-21T09:20:18.513 に答える
15

readの代わりにreadfpを使用します。

with open('connections.cfg') as fp:
    config = ConfigParser()
    config.readfp(fp)
    sections = config.sections()
于 2009-06-13T16:03:27.947 に答える
5

ConfigParserとの違いはRawConfigParserConfigParser次のように、他の構成変数への参照を「魔法のように」拡張しようとすることです。

x = 9000 %(y)s
y = spoons

この場合、xは、になり9000 spoonsyはになりますspoons。この拡張機能が必要な場合、ドキュメントでは代わりにを使用することをお勧めしますSafeConfigParser。両者の違いがはっきりとはわかりません。拡張が必要な​​い場合(おそらく必要ない場合)は、必要なだけですRawConfigParser

于 2009-06-13T16:21:01.443 に答える
4

疑いをテストするには、ConfigParser.readfp()を使用して、ファイルの開閉を自分で処理します。変更後にreadfp電話をかけます。

config = ConfigParser()
#...on each change
fp = open('connections.cfg')
config.readfp(fp)
fp.close()
sections = config.sections()
于 2009-06-13T16:01:03.223 に答える