考虑一下,我有一个字符串,其中包含以下形式的二进制数据:
n\xe1v\u011bsy a p\u0159\xedv\u011bsy Tlumi\u010de pro autobusy
现在我想确定一个字符串是否有二进制数据。我正在尝试以下代码:
def isBinary(line):
print line
return "xe" in line
但这不起作用。如何有效地识别字符串是否包含二进制数据。
答案 0 :(得分:2)
你不能找到子串'xe',因为'\ xe [0-9]'实际上只是一个特殊字符的表示。
而是可以检查每个字符的ASCII值是否在所需范围内。例如如果我只想要字母字符:
for c in input_str:
ascii_val = ord(c)
upper = range(65, 91)
lower = range(97, 123)
if ord(c) not in upper and ord(c) not in lower:
print("NON-ALPHABETICAL CHARACTER FOUND!")
break
答案 1 :(得分:0)
您可以使用"\xe1" in line
,它将在行中查找字节值0xE1。但你真的必须定义“二进制数据”;什么构成文本数据,什么是二进制?假设您的定义是“ASCII” - 也就是说,0x80或更高的任何内容都将其标记为二进制。在那种情况下:
def is_binary(line): # PEP 8 naming - snake_words not mixedCase
return any(ord(x) > 0x80 for x in line)
您可能还想检查行中是否有“\ x00”,因为这通常表示二进制数据。
def is_binary(line):
return "\x00" in line or any(ord(x) > 0x80 for x in line)