np.array2string 不删除数组周围的括号

Posted

技术标签:

【中文标题】np.array2string 不删除数组周围的括号【英文标题】:np.array2string not removing brackets around an array 【发布时间】:2019-03-01 17:57:27 【问题描述】:

我一直在尝试从 excel 文件中提取数据,将其转换为数组,然后将其写入其他一些当前未定义的文件类型(因此 .txt 文件是当前占位符文件类型)。我确定代码相当丑陋,但它可以工作:

import os
import pandas as pd
import glob
import numpy as np

def xlxtract():
for filename in glob.glob('*.xlsx'):
    ExcelFile = filename[:-5]
    RosewoodData = pd.read_excel(ExcelFile + '.xlsx')
    DataMatrix = np.array(RosewoodData)
    DataMatrixString = np.array2string(DataMatrix, precision=4, separator=' ')
    NewFile = open(ExcelFile + 'MATRIX.txt', 'w')
    NewFile.write(' ' + DataMatrixString[1:-1])
    NewFile.close()
    print('Your file has been printed to ' + ExcelFile + '.txt')

无论如何,我遇到的问题是,虽然它确实打印到 .txt 文件,但括号没有被删除。输出看起来是这样的(生成随机数作为测试):

 [ 20   6]
 [ 76   2]
 [ 93  97]
 [ 29  75]
 [ 75  69]
 [ 77  81]
 [ 19  51]
 [ 70 100]
 [ 94  68]

我想删除括号,但似乎没有任何一种方法可以做到这一点。任何帮助将不胜感激。

【问题讨论】:

DataMatrixString[1:-1] 应该删除括号.. array2string 实际上只是用于向用户显示数组,而不是用于以任何特定格式写出它们。 np.savetxt 可能是你想要的。 @bakka,这就是我一直在阅读的内容,但文本文件仍然显示括号。它删除了数组的初始和结束括号,但没有删除所述数组的各个行的括号。 @Eric,我快速查看了 np.savetxt ,似乎这仅用于将文本保存到 .txt 文件。虽然我可以使用它,并且只需添加另一部分代码来将 .txt 文件转换为我最终需要的文件类型,但最好有一个动态的函数,该函数可以动态地确定可以将数据保存为的文件类型。 您可能对哪些其他类型的文件类型感兴趣? 【参考方案1】:

array2string 格式化数组以供显示,就像您要执行 print 一样:

In [32]: x = np.arange(12).reshape(4,3)
In [33]: x
Out[33]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In [34]: np.array2string(x)
Out[34]: '[[ 0  1  2]\n [ 3  4  5]\n [ 6  7  8]\n [ 9 10 11]]'

请注意,列表的打印字符串还包括括号(和逗号):

In [35]: str(x.tolist())
Out[35]: '[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]'

array2string 的另一个复杂之处在于它使用省略号缩写表示长数组(尽管可以通过参数进行更改)。

np.savetxt 是一个相对简单的将二维数组写入文件的方法,并且可以使用显式格式进行模拟。

In [37]: np.savetxt('test.txt', x, fmt='%d', delimiter=',')
In [38]: cat test.txt     # ipython system command to display a file
0,1,2
3,4,5
6,7,8
9,10,11
In [39]: for row in x:
    ...:     print('%d,%d,%d'%tuple(row))
    ...:     
0,1,2
3,4,5
6,7,8
9,10,11

或作为一个字符串

In [42]: astr = '\n'.join(['%3d %3d %3d'%tuple(row) for row in x])
In [43]: astr
Out[43]: '  0   1   2\n  3   4   5\n  6   7   8\n  9  10  11'

【讨论】:

以上是关于np.array2string 不删除数组周围的括号的主要内容,如果未能解决你的问题,请参考以下文章

如何删除焦点按钮文本周围的虚线白色边框

HTML:元素周围的空白,如何删除?

变量周围的堆栈已损坏(将 long long 转换为字节数组)

在WordPress 4.9中删除图像,视频,iframe周围的自动P标签

[HNOI2011][bzoj 2329] 括号修复 [splay+前缀和]

数组变量周围的堆栈损坏