【问题标题】:How to read Ctrl command characters from a file in Python如何在 Python 中从文件中读取 Ctrl 命令字符
【发布时间】:2018-12-06 20:49:24
【问题描述】:

现在我正在尝试使用 Python 2 读取和解析文件。文件的创建者在终端中键入了一堆行,每行包含 (Ctrl A)s,并将这些行复制到文本文件中.所以文件中的行看起来像“(something)^A(something)”。当我在 python 中使用 readlines() 函数读取文件时,无法识别那些“^A”字符串。

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

【问题讨论】:

  • 一般来说,鼓励在本网站上发布您的代码。否则很难告诉你哪里出错了。您需要以二进制读取模式打开文件,读取字节并检查每个字节,使其与 Ctrl-A 的 ascii 代码匹配(我相信它的值是 1)。
  • 你知道我应该如何在python中按字节读取并匹配值1吗?喜欢使用哪个功能?
  • 控制字符是不可见字符,所以终端使用^A作为视觉表示。如果有控制字符,您不想实际查找 ^A 。但是很难说出文件中实际存储的内容。我建议使用以特殊方式显示不可见字符的编辑器来确保。然后就可以用各种escaping methods来表示不可见的字符,并寻找它们。
  • “无法识别”是什么意思?你有例外吗?如果是这样,它是什么,代码是什么样的?
  • 我的意思是“^A”无法读取,变得不可见。

标签: python command-line terminal ctrl


【解决方案1】:

从下面的链接我意识到 ^L 是换页的控制字符。 http://jkorpela.fi/chars/c0.html

然后我从以下链接中找到了这个答案: How to print FF (form feed) character?

我执行了以下代码,它运行良好。

if '\f' in char:

【讨论】:

    【解决方案2】:

    只需像这样以二进制模式读取文件: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
    

    【讨论】:

    • 我没有使用完全相同的方法,但是你给了我一些很好的启发。我没有在我的程序中使用 str.find("^A") ,而是使用了 str.find("\x01") 并且它有效。谢谢!
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2014-08-03
      • 2021-04-11
      相关资源
      最近更新 更多