1

csv ファイルを解析して XML ファイルを生成するスクリプトがあります。パーサーに渡さなければならない引数の 1 つは区切り文字です。私の場合、これはコンマではなくタブです。

この情報は構成ファイルに保存され、抽出して csv パーサーに渡します。

ident = parser.get('CSV', 'delimiter') #delimiter taken from config file 

csv.register_dialect('custom', 
                    delimiter= ident, #passed to csv parser
                    doublequote=False,
                    escapechar=None,
                    quotechar='"',
                    quoting=csv.QUOTE_MINIMAL,
                    skipinitialspace=False)

ただし、「区切り文字」は1文字の文字列でなければならないというタイプエラーが発生します。ident の型を確認したところ文字列ですが、\t がタブとして認識されていないようです。ident = '\t' または delimiter = '\t' を入れると動作します。設定ファイルから値を正しく取得するにはどうすればよいですか。

4

2 に答える 2

1

少し遅すぎるかもしれませんが、小さな回避策があります。パラメーターを 16 進コード値として設定し、それをデコードすることです。

from ConfigParser import ConfigParser
cp = ConfigParser()
cp.add_section('a')
cp.set('a', 'b', '09') #hex code for tab (please note that there is no \x
cp.write(open('foo.ini', 'w'))

from ConfigParser import ConfigParser
cp_in = ConfigParser()
cp_in.read('foo.ini')
print(repr(bytearray.fromhex(cp_in.get('a', 'b')).decode())) #where the magic happens
于 2018-11-02T15:22:18.107 に答える
0

これはConfigParserを使用すると可能ではないようです。ドキュメントではこのケースについて明示的に言及していませんが、先頭の空白は値から削除されると述べています。

値を往復しようとすると、空の文字列が返されます。

from ConfigParser import ConfigParser
cp = ConfigParser()
cp.add_section('a')
cp.set('a', 'b', '\t')
cp.write(open('foo.ini', 'w'))

cp_in = ConfigParser()
cp_in.read('foo.ini')
print(repr(cp_in.get('a', 'b'))) # prints ''
于 2014-10-04T18:19:16.073 に答える