我目前正在开发一个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)上运行。在
如果你们中有人能帮我,我会非常感激的。在
谨致问候 卡斯帕
如果正在读取文件,则需要
decode
它们。在给定一个每行包含json对象的utf-8文件,您可以读取所有对象:
除嵌入换行符处理外,上述代码应产生与您相同的结果:
^{2}$此时,
jlogs
中的所有字符串都是Unicode,您不需要做任何事情来处理“特殊”字符。只需确保代码中没有混合字节和Unicode文本。在some_bytes.decode(character_encoding)
some_text.encode(character_encoding)
不编码字节/解码Unicode。在
如果编码是正确的,并且您只想忽略意外字符,可以使用传递给}参数给
errors='ignore'
或{codecs.open
函数。在文档中的详细信息: http://docs.python.org/2/howto/unicode.html#reading-and-writing-unicode-data
相关问题 更多 >
编程相关推荐