从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']