我正在谈论的控制字符可以在这里找到: http://ascii.cl/control-characters.htm
我需要控制字符作为单个字符长度的实体,不是ASCII代码,或者是符号的纯文本。
如上所述,在sublime和notepad文本编辑器中,我需要实际的符号,而不是它们的ascii代码。所以我需要第二个invalid_chrs_list中显示的字符。
有没有办法获取这些符号,在线某处的文件,或者我可以复制粘贴它们的网站?
编辑:
#Invalid characters ascii codes here (http://ascii.cl/control-characters.htm)
#invalid_chrs_list = [0,1,2,3,4,5,6,7,8,16,17,18,19,20,21,22,23,24,25,26,27] # ascii
#invalid_chrs_list = ['', ''] # real for acsii code 3 and 17 - NEED THE REST - Can't post these characters into stackoverflow so just pretend their there like in my screenshot.
invalid_chrs_list = ['\x00','\x01','\x02','\x03','\x04','\x05','\x06','\x07','\x08','\x10','\x11','\x12','\x13','\x14','\x15','\x16','\x17','\x18','\x19','\x1a','\x1b'] # escaped
with open(file, 'rb') as f:
# Iterate through the rows
for row in f:
# Catch invalid characters
for char in row:
if char in invalid_chrs_list: # <--- MAKE THIS FASTER
print ('found')
break
替代for循环,如果检查工作会更快:
for char in invalid_chrs_list:
if char in row:
我尝试在每个列表的ord(char)
中使用chr(char)
和if char in invalid_chrs_list:
,但我不确定如何将它们相互比较以验证匹配
编辑 - 解决方案: 下面代码中的列表是正确的列表,没有必要使用我在图像中显示的文字。
我在错误的地方寻找答案,感谢@Peteris指出我正确的方向。
我需要将文件模式切换为文本:'r'
或者我需要使用char.encode()
对我正在检查的字符进行编码,以便正确检查文字。在我的情况下,我需要以二进制模式打开文件,所以我选择char.encode()
。
invalid_chrs_list = ['\x00','\x01','\x02','\x03','\x04','\x05','\x06','\x07','\x08','\x10','\x11','\x12','\x13','\x14','\x15','\x16','\x17','\x18','\x19','\x1a','\x1b']
with open('test.txt', 'rb') as f:
# Iterate through the rows
for row in f:
for char in invalid_chrs_list:
if char.encode() in row:
print ('found')
break
答案 0 :(得分:1)
创建一个简单的程序,只需将您想要的字节输出到文件,从ascii代码转换为字节?
但我敢打赌,你不真的想将它们作为文字字符复制/粘贴到你的代码中,它不能以这种方式工作,例如换行符和其他人; ascii代码或转义表示是正确的方法。
答案 1 :(得分:0)
由于我没有足够的声誉来评论,我不得不留下我的评论作为答案。
我认为你想要文字字符而不是它们代表的形式,例如\ 000。由于大量这些字符不可打印或可见,因此将它们存储在文本文件中似乎毫无意义。我可能没有完全理解您的需求,但似乎您希望它们在文本文件中供代码参考?你肯定无法在纯文本编辑器中查看它们。你想如何将它们存储在这个文件中?每行一个,制表符分隔?打开十六进制编辑器并手动编码每个字节最好。