需要.txt文件,将所有ASCII控制字符列为单个字符实体/符号

时间:2017-02-24 18:48:34

标签: python ascii control-characters

我正在谈论的控制字符可以在这里找到: http://ascii.cl/control-characters.htm

我需要控制字符作为单个字符长度的实体,不是ASCII代码,或者是符号的纯文本。

见下文...... a b

如上所述,在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

2 个答案:

答案 0 :(得分:1)

创建一个简单的程序,只需将您想要的字节输出到文件,从ascii代码转换为字节?

但我敢打赌,你真的想将它们作为文字字符复制/粘贴到你的代码中,它不能以这种方式工作,例如换行符和其他人; ascii代码或转义表示是正确的方法。

答案 1 :(得分:0)

由于我没有足够的声誉来评论,我不得不留下我的评论作为答案。

我认为你想要文字字符而不是它们代表的形式,例如\ 000。由于大量这些字符不可打印或可见,因此将它们存储在文本文件中似乎毫无意义。我可能没有完全理解您的需求,但似乎您希望它们在文本文件中供代码参考?你肯定无法在纯文本编辑器中查看它们。你想如何将它们存储在这个文件中?每行一个,制表符分隔?打开十六进制编辑器并手动编码每个字节最好。