1

Hi have this text file that groups information in between the characters "*******************************" eg:

*******************************
15674B  2000
#12 DIVERSION
           800.000
COORDINATES
    0
FLOW DIRECTION
    0      
PROTECT DATA
    0      
DATUM
      0.00
RADIUS TYPE
    2
DIVIDE X-Section
0
SECTION ID

INTERPOLATED
    0
ANGLE
    0.00   0
RESISTANCE NUMBERS
   0  0     1.000     1.000     1.000    1.000    1.000
PROFILE        8
   -15.000    12.000     1.000     <#0>     0     0.000     0
     0.000    10.960     1.000     <#1>     0     0.000     0
     0.600    10.820     1.000     <#0>     0     0.000     0
     0.700    10.410     1.000     <#0>     0     0.000     0
     1.540     9.990     1.000     <#0>     0     0.000     0
     4.040     9.980     1.000     <#2>     0     0.000     0
     6.200    11.160     1.000     <#4>     0     0.000     0
    15.000    12.000     1.000     <#0>     0     0.000     0
LEVEL PARAMS
   0  0    0.000  0    0.000  20
*******************************
15674B  2000
#12 DIVERSION
           900.000

What I am trying to do is extract the second and third line (#12 DIVERSION, 800.00) underneath the characters "*******************************" as well as the PROFILE information on lines 24 -32, and save them to a csv file.

I know that I can use python to read the file eg:

with open ("results.txt","r") as myResults:
    readFile = myResults.readlines()

but my issues is I don't know how identify groups of information between characters "*******************************" and then extract certain lines out.

Any assistance would be greatly appreciated.

1
  • 3
    You can use myResults.read().split('*******************************') to get chunks contained between star lines. Commented Sep 21, 2015 at 23:02

2 Answers 2

1

This will probably work:

lines_you_want = []

with open ("test.txt","r") as myResults:
    lines = myResults.readlines()
    indexes_of_lines_you_want = [] # We create a list for the indexes of the lines you want to extract

    for i in range(len(lines)):
        if '*******' in lines[i]: # We check if the current line is a line full of stars
            indexes_of_lines_you_want.extend([i+2, i+3]) # We add the indexes current_index+2 and current_index+3 to our list

    for i in indexes_of_lines_you_want:
        lines_you_want.append(lines[i])

after that you can save the lines from the list lines_you_want to a .csv file like this

import csv

myfile = open('result.csv', 'w', newline='')
writer = csv.writer(myfile)
writer.writerow(lines_you_want)

though you should probably put import csv in the beginning.

Sign up to request clarification or add additional context in comments.

Comments

1

If the file is not too long (i.e. you can read the whole file into memory), you can try something like this:

with open("results.txt","r") as myResults:
    blocks = myResults.read() # put the whole file into a string

# split the string into blocks and process them independently
for block in blocks.split('*******************************')[1:]:
    lines = block.split('\n')
    print lines[1]
    print lines[2]
    for i in range(24, 33):
        print lines[i]

1 Comment

Should this line for block in contents.split be for block in blocks.split(?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.