2016-07-26 2 views
1

Я изучаю функции ввода-вывода genfromtxt в numpy. Я попробовал пример из руководства пользователя numpy. Речь идет о аргументе комментариев genfromtxt.Комментарий аргумента genfromtxt в numpy

Вот пример из руководства пользователя по NumPy:

>>> data = """# 
... # Skip me ! 
... # Skip me too ! 
... 1, 2 
... 3, 4 
... 5, 6 #This is the third line of the data 
... 7, 8 
... # And here comes the last line 
... 9, 0 
... """ 
>>> np.genfromtxt(StringIO(data), comments="#", delimiter=",") 
[[ 1. 2.] 
[ 3. 4.] 
[ 5. 6.] 
[ 7. 8.] 
[ 9. 0.]] 

Я попытался ниже:

Результат выходит:

genfromtxt: Пусто входной файл: "< _io.BytesIO в 0x0000020555DC5EB8> " warnings.warn ('genfromtxt: пустой входной файл:"% s "'% fname)

Я знаю, что проблема связана с данными. Кто-нибудь может научить меня, как установить данные, как показано в примере? Большое спасибо.

+0

Попробуйте StringIO вместо BytesIO для первого параметра genfromtxt – Jonas

+2

Почему вы вставляете в обратную косую черту данных? – BrenBarn

ответ

0

Попробуйте ниже. Во-первых, не используйте "\". Во-вторых, почему вы используете .BytesIO() использовать StringIO()

import numpy as np 
from StringIO import StringIO 

data = """#     
    # Skip me !  
    # Skip me too !  
    1, 2     
    3, 4     
    5, 6 #This is the third line of the data  
    7, 8     
    # And here comes the last line 
    9, 0     
    """ 

    np.genfromtxt(StringIO(data), comments="#", delimiter=",") 

    array([[ 1., 2.], 
      [ 3., 4.], 
      [ 5., 6.], 
      [ 7., 8.], 
      [ 9., 0.]]) 
+0

Спасибо. Удалив все «\», я могу получить результаты. Я использую python3.5, поэтому мне нужно использовать .BytesIO(). –

+0

Я не использую py3, поэтому у меня нет этой проблемы. Удачи. – Merlin

0

В ipython3 (PY3) интерактивного сеанса я могу сделать:

In [326]: data = b"""# 
    ...: ... # Skip me ! 
    ...: ... # Skip me too ! 
    ...: ... 1, 2 
    ...: ... 3, 4 
    ...: ... 5, 6 #This is the third line of the data 
    ...: ... 7, 8 
    ...: ... # And here comes the last line 
    ...: ... 9, 0 
    ...: ... """ 
In [327]: 
In [327]: data 
Out[327]: b'#\n# Skip me !\n# Skip me too !\n1, 2\n3, 4\n5, 6 #This is the third line of the data\n7, 8\n# And here comes the last line\n9, 0\n' 
In [328]: np.genfromtxt(data.splitlines(),comments='#', delimiter=',') 
Out[328]: 
array([[ 1., 2.], 
     [ 3., 4.], 
     [ 5., 6.], 
     [ 7., 8.], 
     [ 9., 0.]]) 

В Python3, строка должна быть байт; в Py2, который по умолчанию.

С многострочным вводом строки (тройные кавычки) не использовать \. Это продолжение линии. Вы хотите сохранить уведомление \n

data = b""" 
one 
two 
""" 

Я мог бы также использоваться:

data = '#\n# Skip me\n...' 

с явным \n.

genfromtxt работает с любым итерабельным, что дает ему линии. Поэтому я дал ему список строк, созданных с разделенными линиями. StringIO (или ByteIO в Py3) также работает, но это дополнительная работа.

Конечно, другой вариант - скопировать эти строки в текстовый редактор и сохранить их в виде простого текстового файла. Copy-n-paste в интерактивном сеансе - это удобный короткий, но не необходимый.

In [329]: data.splitlines() 
Out[329]: 
[b'#', 
b'# Skip me !', 
b'# Skip me too !', 
b'1, 2', 
b'3, 4', 
b'5, 6 #This is the third line of the data', 
b'7, 8', 
b'# And here comes the last line', 
b'9, 0'] 
+0

. @ Hpaulj делает StringIO по-разному в py3, vs py2, а не пользователем py3. – Merlin

+0

Благодарим вас за многострочный метод ввода строк. У меня проблемы с тройными кавычками, а «\» –

+0

'genfromtxt' ожидает, что его ввод будет байтовой строкой (без юникода).Py3 использует строки unicode в качестве формата по умолчанию, а 'StringIO' обрабатывает значение по умолчанию (независимо от версии). Это 2-е наиболее распространенное различие между 2 и 3 (наиболее распространенным является выражение 'print (...)'). – hpaulj

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