我希望您能够读取sample.cfg文件中的一些值并对它们进行解析。代码如下:
如果我使用ASCII字符,它可以正常工作。就像这样:
如果您运行此程序,其输出如下所示:
当我运行程序时,它的输出如下。
from pyparsing import *
key = Word(alphanums)('key')
equals = Suppress('=')
value = Word(alphanums)('value')
kvexpression = key + equals + value
with open('sample.cfg') as config_in:
config_data = config_in.read()
for match in kvexpression.scanString(config_data):
result = match[0]
print("{0} is {1}".format(result.key, result.value))
如果我使用ASCII字符,它可以正常工作。就像这样:
示例.cfg
city=Atlanta
state=Georgia
population=5522942
但如果我在输入文件中使用一些unicode字符,它不能按预期工作。
sample.cfg(带有Unicode字母)
şehir=İzmir
ülke=Türkiye
nüfus=4279677
如果您运行此程序,其输出如下所示:
lke is T
fus is 4279677
您会发现它会忽略Unicode字符。
更新:
我按照建议修改了代码。现在变成了这样:
from pyparsing import*
key = Word(alphanums + alphas8bit)('key')
equals = Suppress('=')
value = Word(alphanums + alphas8bit)('value')
kvexpression = key + equals + value
with open('şehir.cfg') as config_in:
config_data = config_in.read()
for match in kvexpression.scanString(config_data):
result = match[0]
print("{0} is {1}".format(result.key, result.value))
需要进行的是数据文件的小改动:
sample.cfg
şehir=İzmir
ülke=Türkiye
nüfus=4279677
alfabe=AaBbCcÇçDdEeFfGgĞğHhIiİiJjKkLlMmNnOoÖöPpRrSsŞşTtUuÜüVvYyZz
当我运行程序时,它的输出如下。
ülke is Türkiye
nüfus is 4279677
alfabe is AaBbCcÇçDdEeFfGg
正如您所看到的,以重音s 'ş'开头的第一行未显示。我之前就注意到了这种情况。
几乎到了,但还不够。
我使用的是Linux系统。
pyparsing.pyparsing_unicode.Latin1.alphanums
。 - PaulMcG