Python中的国际字符

2024-10-01 09:27:52 发布

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

我目前正在开发一个Python脚本,它获取一个日志文件的列表(来自搜索引擎),并生成一个包含这些文件中所有查询的文件,以便以后分析。 这个脚本的另一个特点是它删除了最常见的单词,我也实现了,但是我遇到了一个我似乎无法克服的问题。只要查询不包含特殊字符,删除单词的操作就可以按预期进行。由于搜索日志是用丹麦语编写的,所以字符æ、å和å会定期出现。在

在搜索主题时,我现在意识到我需要将这些编码为UTF-8,这是我在获取查询时所做的:

tmp = t_query.encode("UTF-8").lower().split()

t_query是一个查询,我将其拆分,以便稍后将每个单词与我的禁止词列表进行比较。如果不使用编码,我将得到错误:

^{pr2}$

编辑:我也尝试使用解码,但得到以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa7' in position 3: ordinal not in range(128)

我会这样循环:

for i in tmp:
    if i in words_to_filter:
        tmp.remove(i)

如前所述,这对不包括特殊字符的单词非常有效。我尝试将I与当前禁止的单词一起打印,将得到例如:

færdelsloven - færdelsloven

其中第一个单词是tmp中的第i个元素。禁词中最后一个词。显然出了点问题,但我就是找不到解决办法。我尝试了很多在Google和这里找到的建议,但是到目前为止都没有任何效果。在

编辑2:如果有区别的话,我尝试过在使用和不使用编解码器的情况下加载日志文件:

with codecs.open(file_name, "r", "utf-8") as f_src:
    jlogs = map(json.loads, f_src.readlines())

如果重要的话,我在Windows环境中运行python2.7.2。该脚本应该能够在其他平台(即Linux和macos)上运行。在

如果你们中有人能帮我,我会非常感激的。在

谨致问候 卡斯帕


Tags: 文件in脚本编辑编码列表错误query
3条回答

如果正在读取文件,则需要decode它们。在

tmp = t_query.decode("UTF-8").lower().split()

给定一个每行包含json对象的utf-8文件,您可以读取所有对象:

with open(filename) as file:
    jlogs = [json.loads(line) for line in file]

除嵌入换行符处理外,上述代码应产生与您相同的结果:

^{2}$

此时,jlogs中的所有字符串都是Unicode,您不需要做任何事情来处理“特殊”字符。只需确保代码中没有混合字节和Unicode文本。在

  • 要从字节中获取Unicode文本:some_bytes.decode(character_encoding)
  • 要从Unicode文本中获取字节:some_text.encode(character_encoding)

不编码字节/解码Unicode。在

如果编码是正确的,并且您只想忽略意外字符,可以使用传递给errors='ignore'或{}参数给codecs.open函数。在

with codecs.open(file_name, encoding='utf-8', mode='r', errors='ignore') as f:
    jlogs = map(json.loads, f.readlines())

文档中的详细信息: http://docs.python.org/2/howto/unicode.html#reading-and-writing-unicode-data

相关问题 更多 >