1

Python を使用して、Joomla の ini 言語ファイルを sql に変換したいと考えています。ただし、実際には joomla の ini ファイルにはセクションがありません (例: [translations])。

rawconfigparser はほとんどの作業を行いますが、セクションが必要なので、[ALL] という名前の「ダミー」セクションを含む一時ファイルを作成します。

    fout = tempfile.NamedTemporaryFile(delete=True)
    fin = file(self._inFilename, "r")
    fout.write("[ALL]\n")
    for f in fin.read():
            fout.write(f)
    config = ConfigParser.RawConfigParser(allow_no_value=True)
    config.read(fout.name)
    for c in config.items("ALL"):
            self._ini2sql(unicode(c[0]).upper(), unicode('de'), unicode(c[1][1:-1]))

しかし...これは間違いです。最もエレガントなソリューションではありません...これをよりpythonicにするためのヒントはありますか?

4

3 に答える 3

2

実際のファイルを作成する代わりに StringIO を使用できます。

from cStringIO import StringIO
import shutil

data = StringIO()
data.write('[ALL]\n')
with open(self._infilename, 'r') as f:
    shutil.copyfileobj(f, data)
data.seek(0)
config.readfp(data)
于 2012-06-15T08:31:40.220 に答える
1

代わりに、コンテンツを RAM に保持するStringIOを使用できます。

import cStringIO

fout = cStringIO.StringIO()
fout.write("[ALL]\n")

with open(self._inFilename) as fobj:
    fout.write(fobj.read())
fout.seek(0)

config = ConfigParser.RawConfigParser(allow_no_value=True)
config.readfp(fout)

コードとは対照的に、いくつかの最適化があることに注意してください。これは、学習することが重要です。

  1. 常に安全にファイルを閉じます。これはwithステートメントで行われます。
  2. 入力の各文字を反復処理して書き込みます。これは必要ではなく、重大なパフォーマンス上の欠点です。

代わりに、よりクリーンでよりPythonicなAPIを備えたライブラリをConfigParserお勧めします(デフォルトセクションは必要ありません)。configobj例:

from configobj import ConfigObj

config = ConfigObj('myConfigFile.ini')
config.get('key1') 
config.get('key2') 
于 2012-06-15T08:34:06.233 に答える
0

現在のディレクトリの .ini ファイルを読み込んでいます

import configparser
import os

ini_file = configparser.ConfigParser()
ini_file_path = os.path.join(os.path.dirname(__file__),"filename.ini")
ini_file.read(ini_file_path)  # ini_file as a dictionary
print (ini_file["key1"])
于 2019-08-23T21:35:04.810 に答える