需要将所有 ASCII 控制字符列为单个字符的 .txt 文件 entities/symbols
Need .txt file that lists all ASCII Control Characters as single character entities/symbols
我说的控制字符可以在这里找到:
http://ascii.cl/control-characters.htm
我需要控制字符作为它们的单个字符长度实体,而不是表示为 ASCII 代码或它们的符号的纯文本。
见下文...
如上图所示,在 sublime 和记事本文本编辑器中,我需要实际的符号,而不是它们的 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 Whosebug 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 char in invalid_chrs_list:
if char in row:
我尝试在每个列表的 if char in invalid_chrs_list:
中使用 ord(char)
和 chr(char)
,但我不确定如何将它们相互比较以验证匹配
编辑 - 解决方案:
下面代码中的列表是正确的列表,没有必要使用我在图像中显示的文字。
我在错误的地方寻找答案,感谢@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
制作一个小程序,简单地将您想要的字节输出到文件,将它们从 ascii 代码转换为字节?
但我敢打赌,您不会真的想copy/paste将它们作为代码中的文字字符,它不能那样工作,例如换行符和其他; ascii 代码或转义表示是正确的方法。
我说的控制字符可以在这里找到: http://ascii.cl/control-characters.htm
我需要控制字符作为它们的单个字符长度实体,而不是表示为 ASCII 代码或它们的符号的纯文本。
见下文...
如上图所示,在 sublime 和记事本文本编辑器中,我需要实际的符号,而不是它们的 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 Whosebug 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 char in invalid_chrs_list:
if char in row:
我尝试在每个列表的 if char in invalid_chrs_list:
中使用 ord(char)
和 chr(char)
,但我不确定如何将它们相互比较以验证匹配
编辑 - 解决方案: 下面代码中的列表是正确的列表,没有必要使用我在图像中显示的文字。
我在错误的地方寻找答案,感谢@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
制作一个小程序,简单地将您想要的字节输出到文件,将它们从 ascii 代码转换为字节?
但我敢打赌,您不会真的想copy/paste将它们作为代码中的文字字符,它不能那样工作,例如换行符和其他; ascii 代码或转义表示是正确的方法。