2016-07-26 3 views
1

numfromのgenfromtxtのI/O関数を学習しています。 私はnumpyのユーザーガイドから事例を試してみました。これはgenfromtxtのコメント引数に関するものです。ここでnumpyのgenfromtxtのcomments引数

は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:空入力ファイル: "< _0.BytesIOオブジェクト0x0000020555DC5EB8> " warnings.warn( 'genfromtxt:空の入力ファイル:"%s "'%fname)

私は問題がデータであることを知っています。この例のように誰でもデータを設定する方法を教えてくれますか? ありがとうございました。

+0

なぜあなたはデータにバックスラッシュを挿入した最初のgenfromtxtパラメータ – Jonas

+2

ためにStringIOを代わりにBytesIOを試してみてください? – BrenBarn

答えて

0

以下を試してください。まず、"\"を使用しないでください。第二に、なぜあなたは私が行うことができますipython3(PY3)インタラクティブセッションで.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

を使用して、次のとおりです。

のpython3で
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.]]) 

、文字列はバイトにする必要があります。 Py2ではこれがデフォルトです。

複数行の入力(三重引用符)では、\を使用しないでください。それは行の継続です。明示的な\n

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

:あなたは、私も使用している可能性が\n

data = b""" 
one 
two 
""" 

お知らせしておきたいです。

genfromtxtは、それを与える任意のiterableで動作します。だから私は分割線で作られた線のリストを与えた。 StringIO(またはPy3のByteIO)も動作しますが、余分な作業です。

もちろん、これらの行をテキストエディタにコピーし、単純なテキストファイルとして保存することもできます。インタラクティブセッションへのコピーアンドペーストは短時間で簡単ですが、必要はありません。

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は、py3のユーザーではなく、py3、v2のStringIOの動作が異なります。 – Merlin

+0

複数行の文字列入力メソッドをありがとう。私は三重引用符で問題があり、 "\" –

+0

'genfromtxt'はその入力がバイト文字列(ユニコードなし)であると想定しています。Py3はUnicode文字列をデフォルトフォーマットとして使用し、 'StringIO'はデフォルト(バージョンに関係なく)を扱います。これは2番目と3番目の2番目に一般的な違いです(最も一般的なのはprint(...)式です)。 – hpaulj

関連する問題