2

私はpythonが初めてで、ファイルを読み取り、情報を独自のベクトルに入れるプログラムを作成しようとしています。このファイルは、次のような xyz ファイルです。

45 

Fe -0.055 0.033 -0.047
N -0.012 -1.496 1.451
N 0.015 -1.462 -1.372
N 0.000 1.386 1.481
N 0.070 1.417 -1.339
C -0.096 -1.304 2.825
C 0.028 -1.241 -2.739
C -0.066 -2.872 1.251
C -0.0159 -2.838 -1.205

3行目から始めて、それぞれを独自のベクトルに配置する必要があります。これまでのところ、次のとおりです。

file=open("Question4.xyz","r+")
A = []
B = []
C = []
D = []
counter=0
for line in file:
    if counter>2: #information on particles start on the 2nd line
        a,b,c,d=line.split()
        A.append(a)
        B.append(float(b))
        C.append(float(c))
        D.append(float(d))
    counter=counter+1

このエラーが発生しています:

 File "<pyshell#72>", line 3, in <module>
    a,b,c,d=line.split()
ValueError: need more than 0 values to unpack

私がどこで間違っているのかについてのアイデアはありますか?

前もって感謝します!

4

2 に答える 2

2

分割すると実際には 4 つのアイテムにならない行があるようです。そのための条件を追加します。

for line in file:
    spl = line.strip().split()
    if len(spl) == 4:  # this will take care of both empty lines and 
                       # lines containing greater than or less than four items
        a, b, c, d = spl
        A.append(a)
        B.append(float(b))
        C.append(float(c))
        D.append(float(d))
于 2012-10-02T08:54:55.250 に答える
0

ひょっとして (または a だけで'\n') 空の行がどこかにありませんか?

あなたは強制することができます

if counter >= 2:
    if line.strip():
        (a,b,c,d) = line.strip().split()

分割行に 4 があるかどうかをチェックしないことの利点はlen、適切な数のフィールドがない場合にその行を黙ってスキップしないことです (ファイルの最後に空の行があることを経験したように)。 : 代わりに例外が発生し、入力 (またはロジック) を再確認する必要があります。

于 2012-10-02T08:52:46.297 に答える