Я хотел бы прочитать некоторые значения из файла sample.cfg и проанализировать их.Код выглядит следующим образом:
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, он работает нормально.Вот так:
sample.cfg
city=Atlanta
state=Georgia
population=5522942
Но если я использую некоторые символы Юникода во входном файле.Он не работает должным образом.
sample.cfg (с символами Unicode)
şehir=İzmir
ülke=Türkiye
nüfus=4279677
Если вы запустите эту программу, ее вывод будет таким:
lke is T
fus is 4279677
Как вы видите, он игнорирует символы Юникода.
Обновление:
Я изменил код, как было предложено.Теперь это стало выглядеть так:
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
Как вы видите, первая строка, начинающаяся с ударения, не отображается 'ş'.Я заметил эту ситуацию раньше.
Почти там, но не совсем.
Я использую linux box.