Как найти заголовок файла, который находится между тегами заголовка - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть несколько файлов, в которых есть "TITLE ...", а затем "JOURNAL ..." сразу после этого. Конкретные строки варьируются и не являются статичными для каждого файла. Я пытаюсь вытянуть всю информацию, которая существует между "... TITLE ..." и "... JOURNAL ...". До сих пор я могу вытащить только строку, содержащую «TITLE», но для некоторых файлов это выливается на следующую строку.

Я пришел к выводу, что должен использовать a = line.find («TITLE»)) и b = line.find ("JOURNAL"), затем установите цикл for для i в диапазоне (a, b): в нем отображаются все числовые значения строк из 698-768, но вместо этого отображается только числостроки. Как отобразить строку? и как мне тогда очистить это, чтобы не отображать «НАЗВАНИЕ», «ЖУРНАЛ» и пробелы между этими двумя и текстом, который мне нужен? Спасибо!

Это та строка, которая отображает одну строку, в которой существует "TITLE"

def extract_title():
    f=open("GenBank1.gb","r")
    line=f.readline()
    while line:
        line=f.readline()
        if "TITLE" in line:
            line.strip("TITLE   ")
            print(line)   
    f.close()
extract_title()

Это текущий блок, который отображает все эти числа в порядке возрастания в отдельных строках.

def extract_title():
    f=open("GenBank1.gb","r")
    line=f.read()
    a=line.find("TITLE")
    b=line.find("JOURNAL")
    line.strip()
    f.close()

    if "TITLE" in line and "JOURNAL" in line:
        for i in range(a,b):
            print(i)


extract_title()

В настоящее время у меня отображается 698-768, например: 698 699 700 и т. Д. Я хочу сначала получить их как 698 699 700, а затем преобразовать их в строковое значение, а затем я хочупонять, как убрать пробелы и значения "TITLE" и "JOURNAL". Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я не уверен, что я получу то, чего вы хотите достичь, но если я правильно понял, у вас есть строка, похожая на этот "TITLE 659 JOURNAL", и вы хотите получить значение в середине? Если это так, вы можете использовать обозначение среза следующим образом:

line = f.read()
a = line.find("TITLE") + 5 # Because find gives index of the start so we add length
b = line.find("JOURNAL")
value = line[a:b]
value = value.strip() # Strip whitespace

Если мы теперь должны вернуть значение или распечатать его, мы получим:

'659'

Аналогично, если вы хотите получитьзначение после JOURNAL вы можете снова использовать обозначение среза:

idx = line.find("JOURNAL") + 7
value = line[idx:] # Start after JOURNAL till end of string
0 голосов
/ 05 ноября 2019

вам не нужен цикл. просто используйте нарезку:

line = 'fooTITLEspamJOURNAL'
start = line.find('TITLE') + 5 # 5 is len('TITLE')
end = line.find('JOURNAL')
print(line[start:end])

выход

spam

другой вариант - разделить список возвращаемых значений

print(line.split('TITLE')[1].split('JOURNAL')[0])

str.split(). мы используем индексы, чтобы получить элемент, который мы хотим. в замедленном режиме:

part2 = line.split('TITLE')[1]
title = part2.split('JOURNAL')[0]
print(title)
...