4

シミュレーション データ (60 列、10 万行) を含むテキスト ファイルがあります。

a  b   c  
1  11 111
2  22 222
3  33 333
4  44 444

... 最初の行は変数名で、その下 (列) は対応するデータ (float 型) です。

さらに計算するには、これらすべての変数を Python のデータと共に使用する必要があります。たとえば、挿入すると:

print(b)

2 番目の列から値を受け取る必要があります。

データをインポートする方法を知っています:

data=np.genfromtxt("1.txt", unpack=True, skiprows = 1)

変数を「手動で」割り当てます。

a,b,c=np.genfromtxt("1.txt", unpack=True, skiprows = 1)

しかし、変数名の取得に問題があります:

reader = csv.reader(open("1.txt", "rt"))
for row in reader: 
   list.append(row)
variables=(list[0])  

このコードを変更して、最初の行からすべての変数名を取得し、それらをインポートされた配列に割り当てるにはどうすればよいですか?

4

4 に答える 4

3

名前を割り当てようとする代わりに、連想配列(Python では として知られている) を使用してdict、変数とその値を格納することを考えるかもしれません。コードは次のようになります ( csvdocsから自由に借用します)。

import csv
with open('1.txt', 'rt') as f:
  reader = csv.reader(f, delimiter=' ', skipinitialspace=True)

  lineData = list()

  cols = next(reader)
  print(cols)

  for col in cols:
    # Create a list in lineData for each column of data.
    lineData.append(list())


  for line in reader:
    for i in xrange(0, len(lineData)):
      # Copy the data from the line into the correct columns.
      lineData[i].append(line[i])

  data = dict()

  for i in xrange(0, len(cols)):
    # Create each key in the dict with the data in its column.
    data[cols[i]] = lineData[i]

print(data)

dataには、 経由でアクセスできる各変数が含まれますdata['varname']

したがって、たとえば、質問で提供された入力を指定しdata['a']てリストを取得することができます。['1', '2', '3', '4']

ドキュメント内のデータに基づいて名前を作成しようとするのは、上記の辞書ベースの方法と比較して、かなり扱いにくい方法だと思います。ただし、本当にそうしたい場合は、Python でリフレクションを調べることができます (これについては、私は何も知りません)。

于 2013-08-10T01:41:21.247 に答える
2

答えは:あなたはそれをしたくない.

辞書はまさにこの目的のために設計されています。実際に必要なデータ構造は次のようになります。

data = {
    "a": [1, 2, 3, 4],
    "b": [11, 22, 33, 44],
    "c": [111, 222, 333, 444],
}

... たとえば を使用して簡単にアクセスできますdata["a"]

やりたいことをすることは可能ですが、通常の方法は、Python が変数を格納するために内部で (ドラムロール) を使用するという事実に依存するハックです。コードそれらdictの変数の名前を知らないため、それらを取得するために辞書アクセスを使用して立ち往生しているので、そもそも辞書を使用することもできます。

コードが変数の名前を認識していない場合、それらはロジックではなく定義上データであり、そのように扱われるべきであるため、これは Python では意図的に困難にされていることを指摘する価値があります。

まだ確信が持てない場合は、このテーマに関する優れた記事を次に示します。

愚かな Python のアイデア: 変数を動的に作成したくない理由

于 2013-08-10T01:37:17.287 に答える
0

@ andyg0808 と @Zero Piraeus のおかげで、別の解決策を見つけました。私にとって最も適切なのは、Pandas Data Analysis Library を使用することです。

   import pandas as pd

   data=pd.read_csv("1.txt",
           delim_whitespace=True,
           skipinitialspace=True)

  result=data["a"]*data["b"]*3
  print(result)

  0     33
  1    132
  2    297
  3    528

...ここで、0、1、2、3 は行インデックスです。

于 2013-08-10T20:20:57.917 に答える