1

我有一个解析 csv 文件并生成 XML 文件的脚本。我必须为解析器提供的参数之一是分隔符,在我的例子中它不是逗号而是制表符。

此信息存储在我提取的配置文件中,然后传递给 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

也许有点太晚了,但我有一个小解决方法:将参数设置为十六进制代码值,然后对其进行解码

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 回答