np.array2string не удаляет скобки вокруг массива - PullRequest
0 голосов
/ 26 сентября 2018

Я пытался извлечь данные из файлов 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]

Я хотел бы убрать скобки, но, кажется, нет никаких однострочных методов для этого.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 27 сентября 2018

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 - относительно простая запись2d массива в файл и может быть эмулирован с явным форматированием.

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'
...