【问题标题】:How to find the title of a file that sits in between title tags如何找到位于标题标签之间的文件的标题
【发布时间】:2019-11-05 20:16:08
【问题描述】:

我有一些文件有“TITLE...”,然后有“JOURNAL...”紧随其后。特定的行是多种多样的,并且每个文件都不是静态的。我正在尝试提取“... TITLE ...”和“... JOURNAL ...”之间存在的所有信息。到目前为止,我只能提取包含“TITLE”的行,但对于某些文件,它会溢出到下一行。

我推断我必须使用 a=line.find("TITLE") 和 b=line.find("JOURNAL") 然后设置 for i in range(a,b): 的 for 循环:显示 698-768 字符串的所有数值,但只显示数字而不是字符串。如何显示字符串?那么我该如何清理它以不显示“TITLE”、“JOURNAL”以及这两者之间的空格和我需要的文本?谢谢!

这是显示“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 ETC... 我想先让他们像,698 699 700, 然后将它们转换为它们的字符串值 然后我想了解如何去除空格以及“TITLE”和“JOURNAL”值。谢谢!

【问题讨论】:

    标签: python string file parsing


    【解决方案1】:

    我不确定我是否得到了您想要在这里实现的目标,但如果我理解正确,您有一个类似于此“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
    

    【讨论】:

    • 我对 strip 命令不是很熟悉。你能解释一下它是如何工作的吗?我阅读了 python 文档,但我仍然对它的工作原理感到困惑。谢谢!
    • @NickPepin 当然,它只删除字符串开头和结尾的空格并将其保留在中间。因此,如果您有一个像“a b c”这样的字符串,它会返回“a b c”。
    【解决方案2】:

    你不需要循环。只需使用切片:

    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)
    

    【讨论】:

    • 您能解释一下打印声明中发生了什么吗?我很想了解它是如何工作的:-)
    • 我编辑了我的答案。而print是python3中的一个函数。这是python2中的语句。
    • 我的意思是 print 函数里面的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2012-12-23
    • 2020-03-21
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多