Home > Software engineering >  How to extract specific part of a line in a text in Python
How to extract specific part of a line in a text in Python

Time:08-19

I have a huge file that I splitted in a series of lines with the function text.splitlines(). From these lines I need to specifically extract some informations corresponding to a keyword: "ref-p". What I did is:

for index, line in enumerate(tpr_linee):
    ref = "ref-p"
    a = []
    if ref in line:

        a.append(line)

        print(a)

what I obtained is:

  1  ['   ref-p (3x3):']
  2  ['      ref-p[    0]={ 1.00000e 00,  0.00000e 00,  0.00000e 00}']
  3  ['      ref-p[    1]={ 0.00000e 00,  1.00000e 00,  0.00000e 00}']
  4  ['      ref-p[    2]={ 0.00000e 00,  0.00000e 00,  1.00000e 00}']

now I need to move the three series of number into a dictionary in the form:

{ref-p: [[number, number, number], [number, number, number], etc]}.

Also, in the larger dataset the array 3x3 may be a different shape in different files.

So my main goal is to find a way to extract all the numbers corresponding to ref-p, taking only the numbers and ignoring the first appearance of ref-p key.

CodePudding user response:

I have edited the first part of your code, so that the list a will contain a list of strings to be analysed.

Then I split each string based on "=" (equal) sign, and strip the curly braces "{" and "}" to extract only the string of numbers.

When converting to float, the numbers are just 0.0 and 1.0. Try this:

a = []
for index, line in enumerate(tpr_linee):
    if 'ref-p' in line:
        a.append(line)
print(a)

a = ['   ref-p (3x3):', 
     '      ref-p[    0]={ 1.00000e 00,  0.00000e 00,  0.00000e 00}', 
     '      ref-p[    1]={ 0.00000e 00,  1.00000e 00,  0.00000e 00}', 
     '      ref-p[    2]={ 0.00000e 00,  0.00000e 00,  1.00000e 00}' ]

result = {'ref-p': []}
for strg in a:
    if '=' in strg:
        num_list = strg.split('=')[-1].strip('{').strip('}').split(',')
        print(num_list)
        result['ref-p'].append([float(e.strip()) for e in num_list])
print(result)

Output

[' 1.00000e 00', '  0.00000e 00', '  0.00000e 00']
[' 0.00000e 00', '  1.00000e 00', '  0.00000e 00']
[' 0.00000e 00', '  0.00000e 00', '  1.00000e 00']
{'ref-p': [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]}
  • Related