需要帮助解析复杂的文本文件
need help parsing a complicated text file
我有一个结构如下所示的文本文件,我想使用 python 提取数据框中的数据。 Dataframe 应该有 PMID 以及针对每个 PMID 的作者出现的所有文本。
数据格式
PMID- 唯一的 8 位数字
xyz - 文本(可能是多行)
xyz- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
PMID- 唯一的 8 位数字
xyz - 文本(可能是多行)
xyz- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
我在 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(records)
让每个作者在一列中或在传递给数据框构造函数之前加入列表
df = pd.DataFrame(
[', '.join(r) for r in records.values()],
index=records.keys()
)
输出
0
12345678 author1, author2
12345679 author3, author4
我有一个结构如下所示的文本文件,我想使用 python 提取数据框中的数据。 Dataframe 应该有 PMID 以及针对每个 PMID 的作者出现的所有文本。
数据格式
PMID- 唯一的 8 位数字
xyz - 文本(可能是多行)
xyz- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
PMID- 唯一的 8 位数字
xyz - 文本(可能是多行)
xyz- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
AUTHOR- 文本(可能是多行)
我在 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(records)
让每个作者在一列中或在传递给数据框构造函数之前加入列表
df = pd.DataFrame(
[', '.join(r) for r in records.values()],
index=records.keys()
)
输出
0
12345678 author1, author2
12345679 author3, author4