编写numpy字符串的numpy数组,同时编码和删除所有空格(Python)

编写numpy字符串的numpy数组,同时编码和删除所有空格(Python),python,string,python-3.x,numpy,Python,String,Python 3.x,Numpy,假设在Python3中有一个包含numpy.str元素的numpy.ndarray。例如,下面的arr是包含四个numpy.str元素的numpy.ndarray,如下所示: >>> print(arr) ['\tSTART\t 0\n' '12345 ABCDEFG' '1A 2B3C' '\nE N D' ' C++ * 1'] ''.join(tknstring.split()) 我尝试将arr的内容写入一个文件,而不使用[,]和”来表示每个nu

假设在Python3中有一个包含numpy.str元素的numpy.ndarray。例如,下面的arr是包含四个numpy.str元素的numpy.ndarray,如下所示:

>>> print(arr)
['\tSTART\t  0\n'  '12345 ABCDEFG'  '1A 2B3C'  '\nE N D'  '    C++    * 1']
''.join(tknstring.split())
我尝试
arr
的内容写入一个文件,而不使用
[
]
来表示每个
numpy.str
元素,同时删除所有的空格,即制表符、换行符和所有空格字符

也就是说,我尝试在这样一个文件上写入
arr

START012345ABCDEFG1A2B3ENDC++*1
从我的朋友那里,如果我这样做的话

它删除除空格字符以外的所有字符,即:

START012345 ABCDEFG1A 2B3CE N D    C++    * 1
我知道,如果尝试以下操作,我可以删除所有空格字符:

>>> print(arr)
['\tSTART\t  0\n'  '12345 ABCDEFG'  '1A 2B3C'  '\nE N D'  '    C++    * 1']
''.join(tknstring.split())

我的问题是如何编写上述语句以删除空格字符,同时加入元素并应用编码(如上所示)。

加入所有数组元素后,只需将结果字符串拆分为任何空格字符,然后重新加入获得的数组:

''.join(''.join(tknstring).split()).encode('unicode_escape')

从上一个问题(以及我的答案)中的字符串数组开始:

我们可以使用
join
将其转换为单个字符串(就像它是一个字符串列表一样):

使用
regex
我们可以轻松地将所有“空白”替换为空白:

In [1155]: import re
In [1156]: re.sub('\s','',astr)
Out[1156]: 'START012345ABCDEFG1A2B3CEND'
=============

带[]和引号的显示只是显示数组的标准方式:

In [1157]: print(arr)
['\tSTART\t  0\n' '12345 ABCDEFG' '1A 2B3C' '\nE N D']
它与显示列表的标准方式略有不同(请注意逗号):

您可能会发现显示
str(arr)
repr(arr)
字符串很有帮助。每个Python对象都有一种将自身显示为字符串的方式。实际上有两种方法,
str
repr

============

unicode转义可以应用于“join”字符串,但它看起来不像
re.sub
那样做。我们必须浏览
re
文档,看看是否有关于处理字节字符串的内容:

In [1164]: bstr=''.join(arr).encode('unicode_escape')
In [1165]: bstr
Out[1165]: b'\\tSTART\\t  0\\n12345 ABCDEFG1A 2B3C\\nE N D'
In [1166]: re.sub(b'\s',b'',bstr)
Out[1166]: b'\\tSTART\\t0\\n12345ABCDEFG1A2B3C\\nEND'
但是如果你在手之前去掉特殊字符,你可以在手之后应用编码

In [1168]: re.sub('\s','',astr).encode('unicode_escape')
Out[1168]: b'START012345ABCDEFG1A2B3CEND'
re.sub
也适用于普通编码:

In [1177]: re.sub(b'\s',b'',astr.encode())
Out[1177]: b'START012345ABCDEFG1A2B3CEND'
==============

split()。因此,这些变化是有效的:

编码
并加入
b'

使用
转义
拆分
将不再识别这些特殊字符

In [1181]: b''.join(astr.encode('unicode_escape').split())
Out[1181]: b'\\tSTART\\t0\\n12345ABCDEFG1A2B3C\\nEND'
也可以在删除空格后进行编码。您可以添加
转义
,但它现在没有任何用途

In [1183]: (''.join(astr.split())).encode()
Out[1183]: b'START012345ABCDEFG1A2B3CEND'

如果试图将
encoded
字符串写入
w
文件,则会出现错误;它必须用
wb
打开。如果您已经删除了所有特殊字符,您还需要使用
encode
吗?很抱歉没有提前接受。回答得很好,谢谢
In [1180]: b''.join(astr.encode().split())
Out[1180]: b'START012345ABCDEFG1A2B3CEND'
In [1181]: b''.join(astr.encode('unicode_escape').split())
Out[1181]: b'\\tSTART\\t0\\n12345ABCDEFG1A2B3C\\nEND'
In [1183]: (''.join(astr.split())).encode()
Out[1183]: b'START012345ABCDEFG1A2B3CEND'