需要帮助解析复杂的文本文件

我有一个文本文件,其结构如下所示,我想使用 python 提取数据框中的数据。数据框应具有 PMID 以及针对每个 PMID 的作者显示的所有文本。


数据格式


PMID- 唯一的 8 位数字

xyz - 文本(可能是多行)

xyz- 文本(可能是多行)

作者- 文本(可能是多行)

作者- 文本(可能是多行)


PMID- 唯一的 8 位数字

xyz - 文本(可能是多行)

xyz- 文本(可能是多行)

作者- 文本(可能是多行)

作者- 文本(可能是多行)


我在 python 中尝试过的代码如下 - 我能够提取所有 PMID,但我无法找出针对每个 PMID 附加所有作者文本的逻辑。


for lines in open('pubmed-cancerbiol.txt','r'):

    if(lines[0:4] == 'PMID'):

        print(lines)


大话西游666
浏览 92回答 1
1回答

富国沪深

PMID您可以使用as 键和AUTHORs 作为值来收集字典中的数据。假设您从文件开始from io import StringIOfo = StringIO('''PMID- 12345678xyz - text (might be multiple lines)xyz- text (might be multiple lines)AUTHOR- author1AUTHOR- author2PMID- 12345679xyz - text (might be multiple lines)xyz- text (might be multiple lines)AUTHOR- author3AUTHOR- author4''')    # with open(filename, 'r') as fo:然后迭代行并填充字典records = dict()pmid = Nonefor line in fo.readlines():    if line.startswith('PMID-'):        pmid = line.split('-')[-1].strip()        records[pmid] = []    elif line.startswith('AUTHOR'):        records[pmid].append(line.split('-')[-1].strip())创建数据框时,您可以将df = pd.DataFrame(records)每个作者放在一列中或在传递给数据框构造函数之前加入列表df = pd.DataFrame(    [', '.join(r) for r in records.values()],    index=records.keys())输出                         012345678  author1, author212345679  author3, author4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python