Home > Software design >  Python -> Read file and create 3 lists with 3 strings like markers to divide file
Python -> Read file and create 3 lists with 3 strings like markers to divide file

Time:12-25

this is my first meeting with Python :) I have question -> my code and question bellow:

I am trying to divide input file to 3 files (Program info/Program core/Toollist)

  • I can match and write first part like i wanted (break on loop when find string in line),

how can i tell I want to "continue with looping from this found string" and write to second list/file or how can I mark all lines between two strings to append it in list and write do file after. Thanks a lot guy. I wish you merry christmas and will be happy from your help

import os

filename = "D327971_fc1.i"                  # current program name
file = open(filename, 'r')                  # read current program

if os.stat(filename).st_size == 0:          # check if size of file is null
    print('File is empty')
    file.close()
else:
    read = file.readlines()
    programdef = []
    toollist = []
    core = []
   
    line_num = -1
    for line in read:
    
        start_line_point = "Zacatek" in line
        end_line_point = "Konec" in line
        toollist_point = "nastroj" in line
  
        programdef.append(line.strip())
        if start_line_point: break
        core.append(line.strip())           
        if end_line_point: 
        toollist.append(line.strip())  
        
    with open('0progdef.txt', 'w') as f:
       f.write(str(programdef)) 
    with open('1core.txt', 'w') as f:
       f.write(str(core))
    with open('2toollist.txt', 'w') as f:
       f.write(str(toollist))

Divide input file to 3 lists with marking lines by find string and esport this lists to 3 files after it.

CodePudding user response:

If I understood correctly, what you want is to split the file into 3 different files: the first one includes all lines before "Zacatek", the second one includes all lines between "Zacatek" and "Konec" and the third one includes all line between "Konec" and "nastroj".

You could change your for loop to something like:

keywords = {0:'Zacatek', 1:'Konec', 2:'nastroj'}
index = 0

for line in read:
    if index == 3:
        break
    if keywords[index] in line:
        index  = 1
        continue
    if index == 0:
        programdef.append(line.strip())
    elif index == 1:
        core.append(line.strip())
    elif index == 2 : 
        toollist.append(line.strip())

This will create the three expected files containing lists of the lines in the original file.

  • Related