从fi读取unicode字符

2024-10-01 09:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想读一些示例.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字符,它工作得很好。像这样:

示例.cfg

city=Atlanta
state=Georgia
population=5522942

但是如果我在输入文件中使用一些unicode字符。它不像预期的那样工作。你知道吗

示例.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))

以及数据文件中的微小更改:

示例.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操作系统。你知道吗


Tags: keyinconfig示例dataisvaluematch
2条回答

在代码的两个地方用alphanums+alphas8bit替换alphanums,如此行所示。你知道吗

key = Word(alphanums+alphas8bit)('key')

问题是alphanums只匹配不带重音的拉丁字母(加上数字)。alphas8bit匹配拉丁语-1中的附加8位字符。你知道吗

当我对这个输入运行修改过的代码时

sehir=Izmir
ülke=Türkiye
nüfus=4279677
AaBbCcÇçDdEeFfGgGgHhIiIiJjKkLlMmNnOoÖöPpRrSsSsTtUuÜüVvYyZz = 5

如果整个土耳其语字母出现在最后一行,结果是

sehir is Izmir
ülke is Türkiye
nüfus is 4279677
AaBbCcÇçDdEeFfGgGgHhIiIiJjKkLlMmNnOoÖöPpRrSsSsTtUuÜüVvYyZz is 5

我自己找到了解决办法。我不知道这是否是实现这一目标的方便方法。但我觉得很好。你知道吗

从PyImport*

alphanums_tr = u'abcçdefgğhiijklmnoöprsştuüvyzABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ0123456789'

key = Word(alphanums_tr)('key')
equals = Suppress('=')
value = Word(alphanums_tr)('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))

程序输出如下:

şehir is İzmir
ülke is Türkiye
nüfus is 4279677
alfabe is AaBbCcÇçDdEeFfGgĞğHhIiİiJjKkLlMmNnOoÖöPpRrSsŞşTtUuÜüVvYyZz

相关问题 更多 >