0
allt = []
with open('towers1.txt','r') as f:   
    towers = [line.strip('\n') for line in f]
    for i in towers:
        allt.append(i.split('\t'))
    print allt [0]

今私は助けが必要です、私はこのテキストを入力しています

mw91 42.927 -72.84 2.8
yu9x 42.615 -72.58 2.3
HB90 42.382 -72.679 2.4

そして、私が出力するとき

['mw91 42.927 -72.84 2.8']

私のコードのどこで、どの関数を使用して、このリストの 1 番目、2 番目、3 番目、4 番目の値を定義し、その下にあるすべての値を出力できるかを試しています

allt[0][2] or 
allt[i][2] 

しかし、それは私に-72.84を与え、それはエラーであり、それ以外の場合はリストに属性分割がありません

更新、おそらく列挙を使用する必要がありますか?? 中間の 2 つの値が代入されていることを確認する必要がありますが、数値ではなく文字列を使用できます。

4

3 に答える 3

1

それらがタブであると確信していますか?split に引数を指定しないと、空白で自動的に分割されます (つまり、事前に改行を削除する必要もありません)。サンプルをファイルにコピーして、次のように動作させました。

allt = []
with open('towers1.txt','r') as f:   
   for line in f:
        allt.append(line.split())

>>>print allt[0]
['mw91', '42.927', '-72.84', '2.8']
>>>print allt[0][1]
'42.927'

脚注: 最初のリスト内包表記を取り除くと、ファイルを 1 回だけ反復することになり、無駄が少なくなります。


float 値の変換も支援が必要であることがわかりました。line.split()データが正しく分割されると仮定すると、次のようなものがおそらく機能するはずです。

allt = []
with open('towers1.txt','r') as f:   
   for line in f:
         first, *_else = line.split() #Python3
         data = [first]
         float_nums = [float(x) for x in _else]
         data.extend(float_nums)
         allt.append(data)

>>>print allt[0]
['mw91', 42.927, -72.84, 2.8]

Python2 の場合、first, *_else = line.split()を次のように置き換えます。

first, _else = line.split()[0], line.split()[1:]

最後に (以下のコメントに応じて)、特定の一連の値のリストが必要な場合は、もう一度反復する必要があります。これは、リスト内包表記が役立つ場所です。[2]の各要素のインデックス値が必要な場合alltは、次のようにする必要があります。

 >>> some_items = [item[2] for item in allt]
 >>> some_items
 [-72.84, -72.58, -72.679]
于 2013-08-04T22:08:04.843 に答える
0

[] はリストを意味します。

'' は文字列を意味します。

allt = ['mw91 42.927 -72.84 2.8']

alt は文字列を含むリストです:

allt[0] --> 'mw91 42.927 -72.84 2.8'

すべて[0][2] --> '9'

allt.split() --> ['mw91', '42.927', '-72.84', '2.8']

allt.split()[2] --> '-72.84' #これはまだ文字列です。

float(allt.split()[2]) --> -72.84 #これは float になりました。

于 2013-08-04T22:06:36.003 に答える
0

これも機能するはずだと思います

with open('towers.txt', 'r') as f:
    allt = map(str.split, f)

そして、最初の値の後の値を浮動小数点数にする必要がある場合...

with open('towers.txt', 'r') as f:
    allt = [line[:1] + map(float, line[1:]) for line in map(str.split, f)]
于 2013-08-04T22:42:55.970 に答える