我尝试过的所有代码都在VS代码终端和Widow终端(Power Script和Command窗口)中工作,因此我对此非常高兴,但是,当我从文本文件中读取字符串并打印字符串时,转义代码将在普通视图中打印,并且不会对字符串应用颜色。
我尝试过八进制、十六进制和unicode的版本,直到我意识到字符串读取中会包含"\n",所以在字符串上调用.replace( "\n“,"\n")就解决了这个问题,直到我意识到字符串的读取将包含”\n“,所以调用了(”\n“,”\n“)解决了这个问题,我也遇到了同样的问题。
这是我用来读取文件的代码:
with open('ascii_art_with_color.txt','r') as file:
for line in file.readlines() :
text_line = line
print( text_line , end='' )
来自ascii文件的示例:
encounter = You \033[31mencounter\033[0m a wolf howling at the moonlight
使用print函数进行打印很好,无论是字符串常量还是变量。
print('The wolf \033[31mgrowls\033[0m at you as you try to get closer')
winning = 'The wolf lets out a \033[34mpiercing\033[0m cry, then falls to the ground'
print(winning)
想法?让我困惑的主要问题是,对于我从文本文件中读取的字符串,代码没有被解释/应用,任何其他的代码似乎都是有效的。
更新:
正如注释中所建议的那样,该文件包含'\033‘(4个字符)而不是'\033’一个字符。我希望python能够接受这一行,然后将其应用/翻译/编码到ANSI转义序列代码中,同时打印它,就像上面示例中的字符串所做的那样。
同时,我设法使用一个脚本来获取文本文件中的颜色,该脚本用转义序列替换了一个特定的字符串(我猜python在将其写入文件之前在幕后进行编码)。
file_dest = 'ascii_monster_wolf_dest.txt'
with open(file_name,'r') as file, open(file_dest,'w+') as file_dest:
for line in file.readlines():
line = line.replace('{@}','\033[31m')
line = line.replace('{*}','\033[0m')
file_dest.writelines(line)
这是一些进步,但不是我真正想要的。
回到我的问题,是否有方法读取文件,并将序列'\033‘(4个字符)解释为1字符转义序列,就像它处理字符串的方式一样?
发布于 2022-03-09 19:17:37
有几种方法可以满足你的要求。
如果用引号包装单个行,使它们看起来像Python字符串常量,则可以使用ast文字计算器对其进行解码:
s = '"\\x61\\x62"'
# That string has 10 characters.
print( ast.literal_eval(s) )
# Prints ab
或者,您可以将字符串转换为字节字符串,并使用“unicode-转义”编解码器:
s = '\\x61\\x62'
s = s.encode('utf-8').decode('unicode-escape')
print( s )
# Prints ab
然而,在我看来,使用其他类型的标记来表示您的颜色会更好。我的意思是:
<red>This is red</red> <blue>This is blue</blue
也许不是一种HTML类型的语法,而是一些你能理解的代码标记,可以被人类阅读,也可以被所有的语言解释。
发布于 2022-09-07 09:09:46
以二进制格式打开文件。然后按照Tim的建议使用decode()。
with open('ascii_art_with_color.txt','rb') as file:
for line in file.readlines() :
print( line.decode('unicode-escape') , end='' )
https://stackoverflow.com/questions/71401636
复制相似问题