How to read between two specific lines in python

I have a variable that contains content that is somewhat similar to this

**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
Main_data1;a;b;c;dss;e;1
Main_data2;aa;bb;sdc;d;e;2
Main_data3;aaa;bbb;ccce;d;e;3
Main_data4;aaaa;bbbb;cc;d;e;4
Main_data5;aaaaa;bbbbb;cccc;d;e;5
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****

I want to read data starting with Main_data1. {Read only the last column and save it in the list}. Note that this is a variable that contains this data, and it is not a file.

My desired result:

Some_list=[1,2,3,4,5]

I was thinking of using something like this.

for line in var_a.splitlines():
     if Main_data1 in line:
        print (line)

But there are over 200 rows from which I need to read the last column. What could be an effective way to do this

0
source share
4 answers

, "Main_data", - ; -1:

some_list = []
for line in var_a.split("\n"):
     if line.startswith("Main_data"):
          some_list.append(int(line.split(";")[-1]))
+2

:

my_list = [int(line.strip().split(';')[-1]) for line in my_var.split('\n') if line.startswith('Main_data5')]

, pyhtonic str.startswith(), in. ( , , Main_data5 !)

, or startswith.

my_list = [int(line.strip().split(';')[-1]) for line in my_var.split('\n') if line.startswith('Main_data5') or line.startswith('Main_data1')]

, . , , Main_data, , re.match():

import re
my_list = [int(line.strip().split(';')[-1]) for line in my_var.split('\n') if re.match(r'Main_data\d.*',line)]
+1
 my_list = []
 for line in my_var.strip().split('\n):
     if "Main_data1" in line:
         my_list.append(int(line.split(";")[-1]))
     else:
         continue

Or you can use the startswith ('match)' function, as mentioned above.

0
source

My approach is a regex, as it can have more control over the pattern -

File contents

**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
Main_data1;a;b;c;dss;e;1
Main_data2;aa;bb;sdc;d;e;2
Main_data3;aaa;bbb;ccce;d;e;3
Main_data4;aaaa;bbbb;cc;d;e;4
Main_data5;aaaaa;bbbbb;cccc;d;e;523233
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
Main_data1;a;b;c;dss;e;1
Main_data2;aa;bb;sdc;d;e;2
Main_data3;aaa;bbb;ccce;d;e;3
Main_data4;aaaa;bbbb;cc;d;e;4
Main_data5;aaaaa;bbbbb;cccc;d;e;523233
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ******** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
Main_data1;a;b;c;dss;e;1
Main_data2;aa;bb;sdc;d;e;2
Main_data3;aaa;bbb;ccce;d;e;3
Main_data4;aaaa;bbbb;cc;d;e;4
Main_data5;aaaaa;bbbbb;cccc;d;e;523233
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ******** SOME JUNK DATA ****
**** SOME JUNK DATA ****
**** SOME JUNK DATA ****

the code

import re

fl = open(r"C:\text.txt",'rb')
pattern = r'Main_data.*(?<=;)([0-9]{1,})'
data = []
for line in fl.readlines():
    #match all  the digits that have ; before and line starts with Main_data
    if re.search(pattern, line, re.IGNORECASE | re.MULTILINE):
        data.append(re.search(pattern, line, re.IGNORECASE | re.MULTILINE).group(1))
    else:
        data.append('N')
strng = ','.join(data)#get string of the list

lsts = re.findall(r'(?<=,)[0-9,]+(?=,)',strng)# extracts values and excludes 'N'

outpt = [i.split(',') for i in lsts]# generate final list

print outpt

Output

[['1', '2', '3', '4', '523233'], ['1', '2', '3', '4', '523233'], ['1', '2', '3', '4', '523233']]
0
source

All Articles