Читать только цифры в указанной строке в текстовом файле - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь прочитать два числа из строк 18 и 19 текстового файла и найти их среднее значение. Пожалуйста, смотрите только раздел кода, разделенный #########.

Файл содержит смесь слов и цифр, и я не знаю, как просто прочитать цифры. Пример того, как будут выглядеть строки 18 и 19:

TM-score= 0.27878 (if normalized by length of Chain_1)
TM-score= 0.36068 (if normalized by length of Chain_2)
def tmval(self,name,tmvalpath):
    dir = tmvalpath
    splits = []
    avg = 0
    number1 = 0
    number2 = 0
    for f in os.listdir(dir):
        file_name2, file_ext = os.path.splitext(f)
        n1,n2,align = file_name2.split('_')
        n = ('{}_{}'.format(n1,n2))
        if n == name:
#####################################################
            with open(os.path.join(dir,f)) as file:
                for i, line in enumerate(file):
                    if i == 17:
                       #retrieve data from 18th line
                       number1 =
                    elif i == 18:
                       # retrieve data from 19th line
                       number2 = 
######################################################
  avg = float(number1 + number2)/2                      
  return avg

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Похоже на работу для регулярного выражения.

Что-то вроде [0-9] [.] [0-9] * должно сделать это.

Python:

import re
import numpy as np

line = 'TM-score= 0.36068 (if normalized by length of Chain_2)'

str = re.search(r'[0-9][.][0-9]*', line)
number1 = float(str.group(0))
print(number1)
0 голосов
/ 21 апреля 2019

Вы можете использовать регулярное выражение:

import re

with open(os.path.join(dir,f)) as file:
    for i, line in enumerate(file):
        if i == 17:
            number1 = float(re.search(r'\d+\.\d+', line).group())

        elif i == 18:
            number2 = float(re.search(r'\d+\.\d+', line).group())
...