1

有機分子からのいくつかのエネルギーを含むファイルがあります。選択したエネルギーを印刷できるPythonスクリプトを作成したいのですが、たとえば、最初のエネルギー、2番目のエネルギー、最後のエネルギー、最後のエネルギーの前の3番目などです。Pythonを学んでいるので、作成する必要があることを理解しています。検索のリストで、印刷するエネルギーを示す2番目の引数を挿入します。私は学んでいるので、これを行う方法がわかりません。これが私が作成したスクリプトですが、最初のスクリプトは最初のエネルギーを出力し、2番目のスクリプトは最後のエネルギーを出力します。どんな助けでも大歓迎です。(これは、入力として使用しているファイルの例へのリンクですhttps://dl.dropbox.com/u/63216126/ActCat.out

私が作った最初のコード

    import sys
    import re

    filename = sys.argv[1]
    newfile = str(filename) + ".3d"

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


    rline = openold.readlines()

    for line in rline:
        if re.search( r"SCF Done", line ):
            words = line.split()

            energy = float( words[4] )

            print >>opennew,  "The energy of the molecule is %f kcal mol-1" % energy
            break

    openold.close()
    opennew.close()

私が作成した2番目のコード

    import sys
    import re


    filename = sys.argv[1]
    newfile = str(filename) + ".3d"

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

    start = 0

    rline = openold.readlines()

    for i in range (len(rline)):
        if "SCF Done" in rline[i]:
            start = i

    for line in rline[start:start+1] :
        words = line.split()
        energy = words[4]
        print >>opennew,  "The energy of the molecule is %s kcal mol-1" % energy
        break


    openold.close()
    opennew.close()
4

1 に答える 1

0

印刷するエネルギーを選択的に選択しますか?これにより、すべてのエネルギーがリストに集められ、そのリストにインデックスを付けて、必要なエネルギーを印刷できます。ループからを削除してbreak、すべてを収集することに注意してください。

import sys
import re

filename = sys.argv[1]
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(("The energy of the molecule is %f kcal mol-1" % energy, line_number))

print >>opennew, energies[0] # print first energy and line number
print >>opennew, energies[4] # print 5th energy and line number
print >>opennew, energies[-1] # print last energy and line number
print energies[1][0] # print energy
print energies[1][1] # print line number

openold.close()
opennew.close()
于 2012-11-15T03:02:36.547 に答える