2015-12-15 2 views
1

У меня есть 2D текстовый файл:питон чтения 2d в к 1d массиве

[[1406], [1408], [1402], [1394, 102462], [1393], [20388], [20387, 20386], [1386], [1443, 1446, 766], [1432, 1438, 1430, 1416], [1442], [1434], [1430, 1416, 1417, 1419, 3446], [1429], [20011], [20015], [4435], [4441], [4443], [4444], [4448], [2433, 1413, 1418], [4450], [3444], [2478, 823, 3447], [3447], [2481, 1425, 942, 2476, 4449], [2482, 120, 3444], [13512], [3446], [13528]] 

Есть ли способ, что я могу прочитать этот файл в Python? Я попытался с:

from numpy import genfromtxt 
con2 = genfromtxt('muti.txt', delimiter=',') 
con2 = con2.astype(np.int64) 

И результат показывает, как:

nan 
nan 
nan 
nan 
nan 
nan 
nan 
1413.0 
nan 
nan 
nan 
nan 
823.0 
nan 
nan 
nan 
1425.0 
942.0 
2476.0 
nan 
nan 
120.0 
nan 
nan 
nan 
nan 

много nan в массиве. Может кто-нибудь, пожалуйста, помогите мне с этим?

+0

Какой формат имеет вход? Из того, что я понял, вы могли бы просто удалить скобки. 'data = [int (t) для t в data.replace ("] "," "). replace (" ["," "). split()]' – tglaria

ответ

3

Я не знаю, какая функциональность имеет numpy для этого, но поскольку ваш текстовый файл является действительным JSON, вы можете просто загрузить его как JSON, сгладить его, а затем преобразовать результат в массив numpy.

>>> import json 
>>> import numpy as np 
>>> with open('muti.txt', 'r') as f: arr = json.load(f) 
>>> np_arr = np.array([n for subarr in arr for n in subarr]).astype(np.int64) 
>>> np_arr 
array([ 1406, 1408, 1402, 1394, 102462, 1393, 20388, 20387, 
     20386, 1386, 1443, 1446, 766, 1432, 1438, 1430, 
     1416, 1442, 1434, 1430, 1416, 1417, 1419, 3446, 
     1429, 20011, 20015, 4435, 4441, 4443, 4444, 4448, 
     2433, 1413, 1418, 4450, 3444, 2478, 823, 3447, 
     3447, 2481, 1425, 942, 2476, 4449, 2482, 120, 
     3444, 13512, 3446, 13528], dtype=int64) 
+0

большое вам спасибо !!! оно работает! действительно ценю это! –

1

Если это только текст, то просто замените/удалите скобки, раскол, отливку в int.

txt = "[[1406], [1408], [1402], [1394, 102462], [1393], [20388], [20387, 20386], [1386], [1443, 1446, 766], [1432, 1438, 1430, 1416], [1442], [1434], [1430, 1416, 1417, 1419, 3446], [1429], [20011], [20015], [4435], [4441], [4443], [4444], [4448], [2433, 1413, 1418], [4450], [3444], [2478, 823, 3447], [3447], [2481, 1425, 942, 2476, 4449], [2482, 120, 3444], [13512], [3446], [13528]]" 
data = [int(t) for t in txt.replace("]","").replace("[","").split(',')] 

[1406, 
1408, 
1402, 
1394, 
... 
13512, 
3446, 
13528] 
+0

привет @tglaria это тоже работает! Спасибо большое! –

+0

@Condo_programmer помечает это как ответ тогда. – tglaria

Смежные вопросы