In [71]: txt = '''16.37.235.153|119.222.242.130|38673|161|17|62|4646|
...: 16.37.235.153|119.222.242.112|56388|161|17|62|4646|
...: 16.37.235.200|16.37.235.153|59009|514|17|143|21271|
...: '''
Это предупреждение encoding
является неприятным, но незначительным.
С dtype = None, вы должны получить структурированный массив, один field
на столбец:
In [74]: data = np.genfromtxt(txt.splitlines(), encoding=None, dtype=None,delimiter='|')
In [75]: data
Out[75]:
array([('16.37.235.153', '119.222.242.130', 38673, 161, 17, 62, 4646, False),
('16.37.235.153', '119.222.242.112', 56388, 161, 17, 62, 4646, False),
('16.37.235.200', '16.37.235.153', 59009, 514, 17, 143, 21271, False)],
dtype=[('f0', '<U13'), ('f1', '<U15'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8'), ('f7', '?')])
Это 1d.
И как список списков (или кортежей)
In [76]: data.tolist()
Out[76]:
[('16.37.235.153', '119.222.242.130', 38673, 161, 17, 62, 4646, False),
('16.37.235.153', '119.222.242.112', 56388, 161, 17, 62, 4646, False),
('16.37.235.200', '16.37.235.153', 59009, 514, 17, 143, 21271, False)]
Похоже, что он заполняет последнее поле (после последнего |
) с помощьюлогическое значение False
.Вероятно, это можно изменить с помощью какого-либо параметра filling
.
Или ограничить использование протокола для его пропуска
In [77]: data = np.genfromtxt(txt.splitlines(), encoding=None, dtype=None,delimiter='|',u
...: secols=range(7))
In [78]: data
Out[78]:
array([('16.37.235.153', '119.222.242.130', 38673, 161, 17, 62, 4646),
('16.37.235.153', '119.222.242.112', 56388, 161, 17, 62, 4646),
('16.37.235.200', '16.37.235.153', 59009, 514, 17, 143, 21271)],
dtype=[('f0', '<U13'), ('f1', '<U15'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8')])