2016-11-10 3 views
0

入力ファイルから可変数の列を読み込む必要があります(列の数はユーザーによって定義されますが、制限はありません)。すべての列について、私は複数の変数を読んでいますが、私の場合は3つもユーザーによって設定されています。Pythonで可変数の列を読み取る

DO 180 I=1,NMOD 
READ(10,*) QARR(I),RARR(I),WARR(I) 

NMODは内のすべての値だけでなく、ユーザーによって定義されます。Fortranで

2 3 5 
6 7 9 
3 6 8 

はこれが何を本当に簡単です:

だから読み込むファイルは次のようです例。これらはすべて入力パラメータで、メモリに格納されます。これらを行うことで、私が必要とするすべての変数を保存することができ、いつでもIインデックスを変更して呼び出すことができます。 Pythonでどのように同じ結果を得ることができますか?

答えて

1

例ファイルの 'text'

2 3 5 
6 7 9 
3 6 8 

Pythonコード

data = [] 

with open('text') as file: 
    columns_to_read = 1 # here you tell how many columns you want to read per line 
    for line in file: 
     data.append(list(map(int, line.split()[:columns_to_read]))) 

print(data) # print: [[2], [6], [3]] 
data

はあなたの行を表す配列の配列を保持します。上記

+0

2つの質問 1)必要な変数をどのように呼び出すことができますか?もし私がそれらのいくつかだけを必要とすれば、どうすればそれらを選ぶことができますか? 2)NMODに依存するいくつかのカラムを読み込むにはスクリプトが必要です。私はファイル内に他のものも持っており、私はそれをすべて読んでみたくない。それは可能ですか? 多くのありがとうございます。 –

+0

'data [x] [y]'、 'x'は行の番号、' y'は列です。したがって、 'data [2] [2]'は、この場合、数字「8」、最後の行と最後の数字を取得します。 – JChris

+0

ファイル内に無視する必要がある他のデータがある場合は、質問をファイルの適切な例で更新する必要があります。そのため、コードを提供する際に考慮する必要があります。 – JChris

0
from itertools import islice 
with open('file.txt', 'rt') as f: 
    # default slice from row 0 until end with step 1 
    # example islice(10, 20, 2) take only row 10,12,14,16,18 
    dat = islice(f, 0, None, 1) 
    column = None # change column here, default to all 

    # this keep the list value as string 
    # mylist = [i.split() for i in dat] 
    # this keep the list value as int 
    mylist = [[int(j) for j for i.split()[:column] for i in dat] 

コード構築2Dリストマイリスト[行]と

アクセス[カラム]

例 - マイリスト[2] [3]アクセス行2列3

編集 :@Guillaume @Javierの提案によるコード効率の向上

+1

ファイルをテキストファイルとして開きます(open()でモード 'rt'を明示的に指定してから)readlines()を使用します。 – Guillaume

+0

@Guillaumeありがとう、readlines()を使用する答えを編集します。私は改行を考えていましたが、split()はすでにそれに気を付けるべきだから冗長です。 'rt'モードの場合、twxtのデフォルトのreadモードである – Skycc

+2

realines()は何も追加せず、使用されたメモリを発生させているので、問題ないと思います。そのメソッド呼び出しがなければ、同じコードが優れています。 – Javier

関連する問題