can
can

Reputation: 23

Get Data From File With Python

Hi I am trying to get data from log file to extract specific data to control my progress.

I have written a code for open, read and write but I couldn't handle to get specific data.

import sys 
file=open(sys.argv[1],"r") 
file2=open('Data','a') if
file.mode == "r": 
contents =file.read()
print >> file2, contents

Depend to progress energy data is changing

for example for A progress energy count is 2500 but for B its energy count is 3000

output raw data

ETITLE:      TS           BOND          ANGLE          DIHED          IMPRP               ELECT            VDW       BOUNDARY           MISC        KINETIC               TOTAL           TEMP      POTENTIAL         TOTAL3        TEMPAVG

ENERGY:       0       263.6137       847.5817       263.7656        10.7299         -17411.2458      1948.8251      4767.8559         0.0000         0.0000          -9308.8739         0.0000     -9308.8739     -9308.8739         0.0000

ENERGY:       1       263.2889       846.9560       263.8744        10.9840         -17411.4025      1712.6659      4767.8559         0.0000         0.0000          -9545.7775         0.0000     -9545.7775     -9545.7775         0.0000

the data I want to get is the energy number and the potential energy.

example output I want to write to my Data:

Energy: 0 |Potential: -9308

Energy: 1 |Potential: -9508

How can I write a code to handle this situation ?

Upvotes: 2

Views: 5960

Answers (2)

Beth Crane
Beth Crane

Reputation: 623

What format is your datafile?

If it's a spreadsheet you might consider using a library like https://openpyxl.readthedocs.io/en/stable/tutorial.html#accessing-many-cells to help make accessing specific rows/columns easier.

If you're just reading in each line like that, you could split it each line by space/tab and then access cols[13] to get the Potential.

# Read in file
file=open("input.txt")
lines = file.readlines()
output = []
for line in lines:
    # Split on whitespace
    cols = line.split()
    # Skip empty lines
    if len(cols) == 0:
        continue
    # Manually figure out that potential is the 13th column (starting from 0)
    output.append("Energy: " + str(cols[1]) + "|Potential: " + str(cols[13]))

file2=open("output.txt",'a')
file2.write("\n".join(output))

Upvotes: 0

Kenan
Kenan

Reputation: 41

I'd recommend going over these two resources which have to do with reading and writing to files:

https://automatetheboringstuff.com/chapter8/ and https://docs.python.org/2/tutorial/inputoutput.html

Specifically, if you are looking to only output Energy and Potential, I may recommend going line by line (info from the second link. That will make it easy to get through the log, so you can skip the information you don't care about.

To do this, use the readline() method, which will return your log line by line:

with open(newfile, 'w') as outfile:
    l = f.readline()
    print(l)
    # do stuff with l 

That should make it easier to grab the content you care about and write it to the file.

Hope that helps!

Upvotes: 1

Related Questions