1

テキストファイルのテーブルからPython配列にデータを取得したい。入力として使用しているテキストファイルには、7列31行があります。最初の2行の例を次に示します。

10672   34.332875   5.360831    0.00004035881220    0.00000515052523    4.52E-07    6.5E-07

12709   40.837833   19.429158   0.00012010938453    -0.00000506426720   7.76E-06    2.9E-07

私が書き込もうとしたコードは、forループを通過するときに一度に1行を読み取っていないため、機能していません。

data = []
f = open('hyadeserr.txt', 'r')
while True:
    eof = "no"
    array = []
for i in range(7):
    line = f.readline()
    word = line.split()
    if len(word) == 0:
        eof = "yes"
    else:
        array.append(float(word[0]))
        print array
if eof == "yes": break
data.append(array)

どんな助けでも大歓迎です。

4

2 に答える 2

6

スペースで区切られた値を持つファイルは、区切り文字がスペース( )の後に続くスペース(無視できる)である従来のコンマ区切り値(CSV)ファイルの方言です。

幸いなことに、Pythonには方言を理解するが付属しています。csv.reader class

これを使用する必要があります:

例:

#!/usr/bin/env python

import csv

csv.register_dialect('ssv', delimiter=' ', skipinitialspace=True)

data = []
with open('hyadeserr.txt', 'r') as f:
    reader = csv.reader(f, 'ssv')
    for row in reader:
        floats = [float(column) for column in row]
        data.append(floats)

print data
于 2012-12-23T00:25:34.967 に答える
2

本当に必要ないので、ここで cvs を使いたくない場合:

data = []
with open("hyadeserr.txt") as file:
    for line in file:
        data.append([float(f) for f in line.strip().split()])

または、余分な文字がスペースと行末だけであることが確実にわかっている場合は\n、最後の行を次のように変更できます。

data.append([float(f) for f in line[:-1].split()])
于 2012-12-23T01:30:28.463 に答える