Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要帮助解析复杂的文本文件吗_Python_Dataframe_Data Processing - Fatal编程技术网

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

Python 需要帮助解析复杂的文本文件吗,python,dataframe,data-processing,Python,Dataframe,Data Processing,我有一个结构如下的文本文件,我想用python提取数据帧中的数据。Dataframe应该具有PMID以及针对每个PMID的作者显示的所有文本 for lines in open('pubmed-cancerbiol.txt','r'): if(lines[0:4] == 'PMID'): print(lines) 数据格式 PMID-唯一的8位数字 xyz-文本(可能是多行) xyz-文本(可能是多行) 作者-文本(可能是多行) 作者-文本(可能是多行) PMID-唯

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

for lines in open('pubmed-cancerbiol.txt','r'):
    if(lines[0:4] == 'PMID'):
        print(lines)
数据格式

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
s作为值

假设你从文件开始

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(
    [', '.join(r) for r in records.values()],
    index=records.keys()
)
输出

                         0
12345678  author1, author2
12345679  author3, author4

请用您尝试过的代码更新您的问题。对不起,更新了我到目前为止使用的代码,我更希望获得一些逻辑指导。一旦我得到了逻辑,我就能理解代码。@Bharath谢谢你,请习惯于提供有意义的数据样本,并且可以轻松粘贴到codeSure Richie中,我会记住这一点,事实上我正在阅读如何再现错误,并以更有意义的方式问问题。希望下次我能以更好的方式提问。再次感谢您对我的问题的指导和帮助。