使用numpy清理和连接包含特殊字符的2D掩码字符串数组

2024-05-16 07:11:16 发布

您现在位置:Python中文网/ 问答频道 /正文

读取netCDF文件时,其中一个变量是如下所示的二维字符串数组:

[[' ' ' ' ' ' 'B' 'l' 'i' ' ' ' ']
 ['+' -- '\xaa' -- 'F' 'o' 'o' ' ']
 [' ' '1' ']' -- 'B' 'l' 'a' ' ']
 [' ' '\x1a' -- '\x98' -- 'B' 'l' 'o']]

我想要的输出:

['Bli', 'Foo', 'Bla', 'Blo']

或者一个包含这些单词的数组,或者任何带有干净单词的iterable(即,带有删除的空格、特殊字符等)

我的麻烦:

我的困难来自于那些特殊的人物(他们来自哪里,如何消除他们?),还有那些被掩盖的价值观:

import numpy as np

a = np.ma.masked_array([(' ', ' ', ' ', 'B', 'l', 'i', ' ', ' ' ),
                        ('+', ' ', '\xaa', ' ', 'F', 'o', 'o', ' '),
                        (' ', '1', ']', ' ', 'B', 'l', 'a', ' '),
                        (' ', '\x1a', ' ', '\x98', ' ', 'B', 'l', 'o' )],
                       mask=[(0, 0, 0, 0, 0, 0, 0, 0),
                             (0, 1, 0, 1, 0, 0, 0, 0),
                             (0, 0, 0, 1, 0, 0, 0, 0),
                             (0, 0, 1, 0, 1, 0, 0, 0)])

print a
print ''.join(a[0,:]).replace(' ', '')  # this properly produces 'Bli'
print [''.join(i).replace(' ', '') for i in a]

最后一行产生以下错误:

TypeError: sequence item 1: expected string, MaskedConstant found

但即使解决了这个问题,我的字符串中也会出现那些不想要的奇怪字符

a[a.mask] = ' '
print [''.join(i).replace(' ', '') for i in a]
# ['Bli', '+\xaaFoo', '1]Bla', '\x1a\x98Blo']

在单个操作中均匀处理此数组的最佳方法是什么


Tags: 字符串infornpmask数组单词replace
1条回答
网友
1楼 · 发布于 2024-05-16 07:11:16

你能用这个吗

    import numpy as np

    a = np.ma.masked_array([(' ', ' ', ' ', 'B', 'l', 'i', ' ', ' ' ),
                            ('+', ' ', '\xaa', ' ', 'F', 'o', 'o', ' '),
                            (' ', '1', ']', ' ', 'B', 'l', 'a', ' '),
                            (' ', '\x1a', ' ', '\x98', ' ', 'B', 'l', 'o' )],
                           mask=[(0, 0, 0, 0, 0, 0, 0, 0),
                                 (0, 1, 0, 1, 0, 0, 0, 0),
                                 (0, 0, 0, 1, 0, 0, 0, 0),
                                 (0, 0, 1, 0, 1, 0, 0, 0)])

    print ''.join(a[0,:]).replace(' ', '')  # this properly produces 'Bli'
    print [''.join(x for x in y if x.isalpha()) for y in [''.join(i).replace(' ', '') for i in a.filled('')]]

相关问题 更多 >