Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中从文件中读取Ctrl命令字符_Python_Command Line_Terminal_Ctrl - Fatal编程技术网

如何在Python中从文件中读取Ctrl命令字符

如何在Python中从文件中读取Ctrl命令字符,python,command-line,terminal,ctrl,Python,Command Line,Terminal,Ctrl,现在我正在尝试使用Python2读取和解析一个文件。文件的创建者在终端中键入一组行,每行中都有(Ctrl a)s,然后将这些行复制到文本文件中。因此,文件中的行看起来像“(something)^A(something)”。在python中使用readlines()函数读取文件时,无法识别那些“^A”字符串 我尝试使用io.open和codecords.open并将编码设置为UTF-8,但“^A”显然不是UTF-8字符串。有人知道如何使用python从文件中读取这些特殊的控制命令字符串吗?多谢各位

现在我正在尝试使用Python2读取和解析一个文件。文件的创建者在终端中键入一组行,每行中都有(Ctrl a)s,然后将这些行复制到文本文件中。因此,文件中的行看起来像“(something)^A(something)”。在python中使用readlines()函数读取文件时,无法识别那些“^A”字符串


我尝试使用io.open和codecords.open并将编码设置为UTF-8,但“^A”显然不是UTF-8字符串。有人知道如何使用python从文件中读取这些特殊的控制命令字符串吗?多谢各位

这些控制字符是的一部分,数字代码范围为0到31(或00到1F,以十六进制表示)。要从字符串中删除它们,只需使用正则表达式替换:

import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)

只需以二进制模式读取文件,如下所示:
open('file.txt','rb')
。Ctrl-A将是值1

with open('test.txt', 'rb') as f:
    text = f.read()
    for char in text:
        if char == b'\x01': # \x01 stands for the byte with hex value 01
            # Do something
            pass
        else:
            # Do something else
            pass

通过下面的链接,我意识到^L,是表单提要的控制字符。

然后我从以下链接中找到了这个答案:

我执行了下面的代码,它工作得非常好

if '\f' in char:

一般来说,我们鼓励您在本网站上发布您的代码。否则很难告诉你哪里出了问题。您需要以二进制读取模式打开文件,读取字节并检查每个字节,使其与Ctrl-A的ascii代码匹配(我认为是值1)。您知道我应该如何在python中按字节读取并与值1匹配吗?就像使用哪个函数一样?控制字符是不可见字符,因此终端使用^A作为视觉表示。如果有控制字符,则不希望实际查找^A。但是很难说文件中实际存储了什么。我建议使用以特殊方式显示不可见字符的编辑器来确保。然后你可以用各种各样的符号来表示看不见的字符并寻找它们。你说的“无法识别”是什么意思?你有例外吗?如果是这样的话,它是什么?代码是什么样子的?我的意思是“^A”不能被读取并且变得不可见。我没有使用完全相同的方法,但是你给了我一些很好的启发。在我的程序中,我没有使用str.find(“^A”),而是使用str.find(“\x01”),它起了作用。非常感谢。