为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

大话西游666 2023-07-18 10:09:53
我有一个文本文件,其结构如下所示,我想使用 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)
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

PMID您可以使用as 键和AUTHORs 作为值来收集字典中的数据。


假设您从文件开始


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


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信