读取netCDF文件时,变量之一是一个二维字符串数组,如下所示:
[[' ' ' ' ' ' 'B' 'l' 'i' ' ' ' ']
['+' -- '\xaa' -- 'F' 'o' 'o' ' ']
[' ' '1' ']' -- 'B' 'l' 'a' ' ']
[' ' '\x1a' -- '\x98' -- 'B' 'l' 'o']]
我想要的输出:
['Bli', 'Foo', 'Bla', 'Blo']
或者包含这些单词的数组,或者任何可以使用干净单词进行迭代的单词(即,已删除空格,特殊字符等)。
我的麻烦
我的困难来自于特殊字符(它们来自何处以及如何删除它们?)以及掩盖的值:
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:序列项目1:预期的字符串,发现了MaskedConstant
但是即使解决了这个问题,我仍然会在字符串中留下那些不想要的奇怪字符……
a[a.mask] = ' '
print [''.join(i).replace(' ', '') for i in a]
# ['Bli', '+\xaaFoo', '1]Bla', '\x1a\x98Blo']
在一次操作中均匀处理此数组的最佳方法是什么?
答案 0 :(得分:1)
可以使用吗?
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('')]]