我的问题实际上有两个部分。我编写了一个函数,通过简单的替换从字符串中删除ANSI代码,但是函数按原样返回字符串。我已经尝试用pdb进行调试,但结果没有意义,因为好像Python本身有一个小问题。但是我怀疑,所以我想弄清楚我在代码中没有看到的错误。另外我想知道是否有更好的方法来删除(可能还没有看到)ANSI代码,而不是每次修改函数。
这是pdb屏幕的一个镜头让我困惑: pdb screenshot of function debugging
n_text 未设置,目标设置为奇怪的东西,执行行指针以某种方式设置为非可执行行(157)。 当我使用 re 而不是 string.replace 时,我遇到了类似的错误。
功能是
def clean_ansi(text, remove=''):
# remove ANSI control codes
n_text = text
targets = [''.join([chr(cde) for cde in [27, 91, 67]]),
''.join([chr(cde) for cde in [27, 91, 48, 109]]),
''.join([chr(cde) for cde in [27, 91, 49, 109]])]
for target in targets:
n_text = n_text.replace(target, '')
return n_text
对于此示例,我要清理的字符串是
“? - 人(苏格拉底)\ n \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ x1b [C \ x1b [C \ x1b [C \ x1b [C \ x1b [C \ x1b [C \ x1b [C. \ n \ x1b [1mtrue。\ x1b [0m \ n \ n? - ''
并且预期的回报是
'? - human(socrates)\ n。\ ntrue。\ n \ n? - ''
将内容置于上下文中,这是项目to create a command-line IDE的一部分,当查询传递给SWI-Prolog实例(通过pexpect)并且解析输出以仅提供实际内容时,会出现此特定问题结果,在这种情况下是 true。。
答案 0 :(得分:0)
您的代码应该从显示的字符串中清除ANSI代码,您确定要正确调用它吗?
无论哪种方式,它都会删除所选代码,并且不是特别优雅或高效的方式 - 我建议您使用正则表达式并省去一些麻烦:
import re
ANSI_CLEANER = re.compile(r"(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]")
clean_string = ANSI_CLEANER.sub("", your_string)
print(repr(clean_string))
# prints '?- human(socrates)\n.\ntrue.\n\n?- '