微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决需要帮助来解析复杂的文本文件

我有一个结构如下的文本文件,我想使用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)

解决方法

您可以使用以PMID作为键,以AUTHOR作为值的字典收集数据。

假设您从文件开始

from io import StringIO
fo = StringIO(
'''PMID- 12345678
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- author1
AUTHOR- author2

PMID- 12345679
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- author3
AUTHOR- author4''')
    
# with open(filename,'r') as fo:

然后迭代行并填充字典

records = dict()
pmid = None
for 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()
)

输出

                         0
12345678  author1,author2
12345679  author3,author4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。