2

で使用numpyすると、非正方形のテーブルをインポートpython3.3できますか? genfromtxt次のようなファイルから読み取りたい:

題名

2 1

-0.6634 -0.3830 -0.0000 C

0.6634 0.3830 -0.0000 R

1 2 1 1

各行は . で終わります\n。明らかに、このテーブルは正方形ではありません。loadtxtまたはで成功していませんgenfromtxt。どちらも正方形のテーブルが必要です。例とその結果を次に示します。

>>> with open('propane.ct','r') as f:
       txt = f.read()
       data = np.genfromtxt(io.BytesIO(txt.encode()), delimiter='\n', dtype=None)

[b'propane.ct' b'3 2' b'-1.3268   ' b'0.0000    ' b'1.3268   -' b'1 2  1  1'
 b'2 3  1  1']

>>> np.loadtxt('propane.ct',skiprows=1)
array([[ 3.    ,  2.    ],
       [-1.3268, -0.383 ],
       [ 0.    ,  0.383 ],
       [ 1.3268, -0.383 ],
       [ 1.    ,  2.    ],
       [ 2.    ,  3.    ]])

また

>>> np.genfromtxt('propane.ct')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/lib/npyio.py", line 1638, in genfromtxt
    raise ValueError(errmsg)
ValueError: Some errors were detected !
    Line #2 (got 2 columns instead of 1)
    Line #3 (got 4 columns instead of 1)
    Line #4 (got 4 columns instead of 1)
    Line #5 (got 4 columns instead of 1)
    Line #6 (got 4 columns instead of 1)
    Line #7 (got 4 columns instead of 1)

ファイルはプロプライエタリ ソフトウェアによって生成されるため、最初のファイル作成時にテーブルを 2 乗することはできません。numpy各行に列を追加して正方形にすることも考えましたが、組み込みを使用するよりも効率が悪いでしょう。

私が間違っていることはありますか、それとも独自のパーサーを作成する必要がありますか?

4

1 に答える 1

2

次のようnp.genfromtxtにパラメータの設定を使用できます。skip_header

np.genfromtxt('my_file.csv', skip_header=4, dtype=str)
#array([['-0.6634', '-0.3830', '-0.0000', 'C'],
#       ['0.6634', '0.3830', '-0.0000', 'R'],
#       ['1', '2', '1', '1']],
#      dtype='|S7')
于 2013-10-10T21:11:51.297 に答える