ANSI代码在字符串ndarray中不起作用

时间:2019-02-27 22:49:13

标签: python numpy

我认为解释我的问题的最好方法就是展示它:

import numpy as np

coloured_letters = np.ndarray(shape=(2, 2), dtype="<U100")

print("\033[1;32;40m A test \033[30m")
def fill(ndarray):
    y = 0
    x = 0
    while y < 2:
        while x < 2:
            ndarray[y][x] = "\033[1;32;40m A test \033[30m"
            x = x + 1
        x = 0
        y = y + 1


fill(coloured_letters)
print(coloured_letters)

输出:

 A test
[['\x1b[1;32;40m A test \x1b[30m' '\x1b[1;32;40m A test \x1b[30m']
 ['\x1b[1;32;40m A test \x1b[30m' '\x1b[1;32;40m A test \x1b[30m']]

“测试”的背景为鲜绿色,带有白色背景。

1 个答案:

答案 0 :(得分:1)

Numpy完全存储您想要的值。但是,当您打印变量coloured_letters时,numpy会调用__repr____str__函数将字符串转换为可打印的表示形式。这意味着它将把每个字符串转换为终端可以仅使用普通ASCII字符打印的内容。

如果您从coloured_letters打印任何元素,它将正确打印。如果仍要获取numpy数组的数组格式,则可以访问每个元素,并在其周围打印括号。

for row in range(len(coloured_letters)):
  print("["+",".join(coloured_letters[row])+"]")

这将打印如下内容,每个A test都是白色的绿色。

[A test, A test]
[A test, A test]