从python文件中读取错误UTF数据的列表,并将其与行进行比较

从python文件中读取错误UTF数据的列表,并将其与行进行比较,python,python-2.6,Python,Python 2.6,让我们看一下这个字符序列 >>> '\xed\xba\xbd' 'íº½' 我的conf_文件包含这些字符串的列表,如果它们出现在一行中,则必须对这些字符串进行比较,并且必须排除这些字符串 $cat excl_char_seq.lst \xed\xba\xbd \xed\xa9\x81 \xed\xba\x91 下面是我的代码,用于比较一行是否包含这些序列 v_conf_file = 'excl_char_seq.lst' with open(v_conf_file)

让我们看一下这个字符序列

>>> '\xed\xba\xbd'
'íº½'
我的
conf_文件
包含这些字符串的列表,如果它们出现在一行中,则必须对这些字符串进行比较,并且必须排除这些字符串

$cat excl_char_seq.lst
\xed\xba\xbd
\xed\xa9\x81
\xed\xba\x91
下面是我的代码,用于比较一行是否包含这些序列

v_conf_file = 'excl_char_seq.lst'   
with open(v_conf_file) as f:
     seqlist = f.read().splitlines()
line = 'weríº½66'
print ([ 1 for seqs in seqlist if seqs in line ])
但是上面代码的打印列表是空的

当我打印seqlist时,我得到了以下输出,它似乎用“\”转义了序列


我应该如何更正代码以使其与文件内容匹配?

问题是您从文件中读取的行实际上包含12个字符:
\
x
e
d
\
x
b
a
x
b
d
,您希望将其转换为3个字符
'\xed'
,'
\xba'
和'
\xbd'
。正则表达式可以帮助识别以
\x
开头的转义字符:

def unescape(string):
    rx = re.compile(r'(\\x((?:[0-9a-fA-F]){2}))')
    while True:
        m = rx.search(string)
        if m is None: return string
        string = string.replace(m.group(1), chr(int(m.group(2), 16)))
您可以使用它预处理从文件中提取的行(不要忘记导入
re
module):

当我控制
seqlist
的内容时,我得到了预期的结果:

>>> print seqlist
['\xed\xba\xbd', '\xed\xa9\x81', '\xed\xba\x91']

谢谢你的回答。我得试试这个。。我会回来的。
v_conf_file = 'excl_char_seq.lst'   
with open(v_conf_file) as f:
     seqlist = [ unescape(line.strip()) for line in fd ]
line = 'weríº½66'
print ([ 1 for seqs in seqlist if seqs in line ])
>>> print seqlist
['\xed\xba\xbd', '\xed\xa9\x81', '\xed\xba\x91']