编写numpy字符串的numpy数组,同时编码和删除所有空格(Python)
假设在Python3中有一个包含numpy.str元素的numpy.ndarray。例如,下面的arr是包含四个numpy.str元素的numpy.ndarray,如下所示:编写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
>>> 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'