Steven D'Aprano wrote:
On Mon, 08 Jun 2009 18:13:50 +0200, Francesco Pietra wrote:

I come 'naked', which is unusual and unfair.

???

However, I find it
difficult to give a correct start. The files consist, among other
things, of a huge number of blocks of the type


NSTEP = 1000 TIME(PS) = 152.000 TEMP(K) = 298.54 PRESS = 89.4 Etot = -134965.2123 EKtot = 41282.1781 EPtot = -176247.3905 BOND = 1771.7644 ANGLE = 6893.3003 DIHED = 4660.1650 1-4 NB = 1931.6071 1-4 EEL = 7799.8343 VDWAALS = 19047.1551 EELEC = -218354.9960 EHBOND = 0.0000 RESTRAINT = 3.7793 EAMBER (non-restraint) = -176251.1698 EKCMT = 16048.2253 VIRIAL = 14755.8154 VOLUME = 669299.5681 Density = 0.9896
 Ewald error estimate:   0.8252E-05



(in attachment what surely is a correct reproduction of columns)

I would like to extract values corresponding to variable DIHED (here
4660.1650) and getting also the mean value from all DIHED.

Thanks for giving a possible attack


Assuming no DIHED value will ever be split over two lines:


data = open(filename)
values = []
for line in data:
    if line and line.strip():  # ignore blanks
         words = line.strip().split()
         try:
             i = words.index("DIHED")
         except IndexError:
             continue
         values.append(float(words[i+2]))
mean = sum(values)/len(values)


should do the job.

str.index raises ValueError, not IndexError. Anyway, your code could be shortened slightly:

data = open(filename)
values = []
for line in data:
    words = line.split()
    try:
        i = words.index("DIHED")
        values.append(float(words[i + 2]))
    except ValueError:
        pass
mean = sum(values) / len(values)
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to