5

ですから、私はPythonに非常に精通しており、自分が書いたmatlabコードを複製して学習しようとしています。matlabで、タブ区切りのデータファイルをロードする部分があります。構文

x = load(data.txt)

タブで区切られたデータを取得し、xというラベルの付いた行列のセルに配置します。

Pythonでこれを行う方法はありますが、コンマ区切りのデータを使用しますか?

4

5 に答える 5

17

いくつかの方法がありますが、アプリケーションに最も適した方法を選択してください。

numpyを使用している場合は、前処理後にファイルが適切な構造にロードされるため、numpyの、、、または関数を使用することをお勧めしloadます。loadtxtfromfilegenfromtxt

しかし、numpy(またはいくつかのファイル読み込み機能を備えた他の大きなライブラリ)を使用する予定がない場合は、ファイルを読み込むためだけにそれを使用するのはやり過ぎでしょう...組み込みのPython関数またはcsvの使用を検討してください代わりに標準ライブラリのモジュール...それははるかに柔軟で、はるかにスムーズになります。

file.txt(各行の値はタブで区切られています)を使用した例を使用すると、次のようになります。

1   2   3   4
7   8   9   10  11  12
13  14  15

Pythonビルトイン

インポートするモジュールがなく、非常に簡単で柔軟性があり、ほとんどの状況に適したオプションです。

rb組み込み関数のみを使用して、テーブル(値のリストのリスト、タブでファイルに区切られている)の読み取り(フラグ)のためにファイルをバイナリモードでロードします。

>>> file = open('file.txt', 'rb')
>>> table = [row.strip().split('\t') for row in file]

csv

標準ライブラリのcsvモジュールも非常に簡単です。

CSVはカンマ区切り値を意味しますが、実際には標準がなく、任意の区切り文字を選択できることに注意してください。したがって、CSVは、すべてのセル指向またはテーブルのようなファイルを表します。

rbcsvを使用してテーブル(値のリストのリスト、タブでファイルに区切られている)の読み取り(フラグ)のためにファイルをバイナリモードでロードしますreader

>>> import csv
>>> file = open('file.txt', 'rb')
>>> data = csv.reader(file, delimiter='\t')
>>> table = [row for row in data]

セルへのアクセス

テーブルは前の2つの例と同様にロードされており、テーブルのデータには次のようにアクセスできますtable[row][col]

>>> table
[['1', '2', '3', '4'], ['7', '8', '9', '10', '11', '12'], ['13', '14', '15']]    
>>> table[0]
['1', '2', '3', '4']
>>> table[1][2]
9
于 2012-06-07T21:18:16.367 に答える
10

MATLABのような目的でPythonを使用している場合は、NumPy(およびscipy)を使用する必要があります。特に、MATLABユーザー向けのNumPyを読む必要があります。

カンマ区切りのデータがある場合は、numpy.loadtxtそれを読み取るために使用できます(もちろん、numpyをインストールした後)。

$ cat matrix.csv 
1,2,3
4,5,6
7,8,9

その後

>>> import numpy as np
>>> m = np.loadtxt("matrix.csv", delimiter=",")
>>> m
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])
>>> np.matrix(m)
matrix([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.]])
于 2012-06-07T18:49:45.073 に答える
2

numpy.loadtxt関数は、ASCIIファイルからnumpy配列にデータを読み取ります。値を区切るために使用される文字列は、区切り文字引数を使用して定義できます。

numpy.loadtxt('data.txt', delimiter=',')

より複雑なケースでは、このnumpy.genfromtxt関数は非常に優れた代替手段です。

于 2012-06-07T18:51:33.650 に答える
2

標準ライブラリにはcsvモジュールがあります。

こちらのドキュメントを参照してください

>>> import csv
>>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|')
>>> for row in spamReader:
...     print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
于 2012-06-07T18:48:00.500 に答える
0

csvモジュール(具体的にはreaderクラス)および/またはnumpy.loadtxt関数を参照してください。

于 2012-06-07T18:50:49.490 に答える