0

私はPythonを学んでおり、「キーワード」を含むいくつかの行を検索し、(以前に)選択されたリスト行を新しいファイルに書き込み/印刷するスクリプトを作成しました(2番目の引数を使用して、リスト)。

選択したリスト行が実際の len(list) よりも大きい場合にステートメントを追加しようとするまで、すべてがうまくいきました。次に、選択された list_line = len(list); 何らかの理由で、それは機能しません。

これが機能しない理由を誰でも指摘できますか、これは私のスクリプトです。助けてくれてありがとう。(これは、入力として使用しているファイルの例へのリンクです)

    import sys
    import re

    filename = sys.argv[1]
    line_select = int(sys.argv[2])


    newfile = str(filename) + ".3d"

    openold = open(filename,"r")
    opennew = open(newfile,"w")

    rline = openold.readlines()

    energies = []

    line_number = 0

    for line in rline:
        line_number += 1
        if re.search( r"SCF Done", line ):
            words = line.split()
            energy = float( words[4] )
            energies.append(str(line_number) + " : " + "The energy of the molecule is %f kcal mol-1" % energy)

    len_list = len(energies)

    if line_select > len_list:
        line_select = len_list

    print >>opennew, energies[line_select]

    openold.close()
    opennew.close()
4

1 に答える 1

4

Python のインデックスは 0 から始まるため、リストの最後の要素energiesは実際には です。energies[len_list-1]

したがって、「」の最後の要素を出力したい場合は、リストの長さよりも 1 つ小さい値energiesに初期化する必要があります。line_select

if line_select >= len_list:
    line_select = len_list-1
于 2012-11-15T17:57:11.943 に答える