Python 将此文本文件处理为结构化表的最佳策略?
我的合作者希望我将输入文本文件处理到结构化表中: 原始输入文本文件如下所示Python 将此文本文件处理为结构化表的最佳策略?,python,pandas,text-files,Python,Pandas,Text Files,我的合作者希望我将输入文本文件处理到结构化表中: 原始输入文本文件如下所示 PMID 22224631 标题-环氧化酶-2基因的765 G_C和-1195 A_G启动子变体可降低子痫前期的风险。 发现8个基因 基因CRP提到 基因GC提及 基因PTGS2提到 发现1个变体 变体I399V URL 基因PTGS1提到 发现2个变体 变量L255L URL 变量V255V URL 基因CT49提到 基因GAA提到 发现1个变体 变量Q255H URL 基因CGA提到 吉恩·塔特提到 PMID 160
PMID 22224631
标题-环氧化酶-2基因的765 G_C和-1195 A_G启动子变体可降低子痫前期的风险。
发现8个基因
基因CRP提到
基因GC提及
基因PTGS2提到
发现1个变体
变体I399V URL
基因PTGS1提到
发现2个变体
变量L255L URL
变量V255V URL
基因CT49提到
基因GAA提到
发现1个变体
变量Q255H URL
基因CGA提到
吉恩·塔特提到
PMID 16076618
标题1166C血管紧张素II 1型受体基因突变与先兆子痫妇女的脐血流速度测定相关。
发现13个基因
基因AGTR2提到
基因QTRT1提到
基因SLC25A10提到
基因ATM提到
PIH基因提到
基因CCL14提到
基因AGT提到
任志刚提到
基因ASAH1提到
基因AGTR1提到
基因SSD提到
吉恩·塔特提到
发现1个变体
变量D389A URL
基因ACE提到
发现2个变体
变量D389A URL
变体H389P URL
您可以看到,对于每个PMID(科学出版物的id),都有一些关于基因的信息,对于每个基因,都可能有一些关于变体的信息。输入文本非常类似于“打印”函数输出,而不是表格。然后,每个PMID块由一条空行分隔
协作需要的最后一个表类似于一个长格式表(.csv),由三层组成:PMID、gene和variant。PMID包含基因,基因包含(或不包含)变体。以上述输入文件为例:
PMID |基因|变体
22224631 | CRP |编号
22224631 |总承包商|编号
22224631 | PTGS2 | I399V
22224631 | PTGS1 | L255L
22224631 | PTGS1 | V255V
22224631 | CT49 |号
22224631 | GAA | Q255H
....... | .....
我没有太多在Python中处理原始文本文件到表的经验
我的想法是先用正则表达式去掉多余的单词。我试着读入这个文本文件,它会生成一个大的字符串列表,其中每个字符串都是输入文件中的一行
with open ("gene and variants.txt", "r") as myfile:
data=myfile.readlines()
data2 = [x for x in data if not x.startswith('Title') and not
x.startswith('Found')]
data3 = [x for x in data2 if x != " \t\n"]
data4 = [x.strip(" Mentions\n") for x in data3]
data4 = [x.strip(" URL") for x in data4]
data4 = [x.replace("Gene\t", "Gene") for x in data4]
data4 = [x.replace("PMID\t", "PMID ") for x in data4]
data4 = [x.replace("Variant\t", "Variant") for x in data4]
幸运的是,我能够去除大部分不必要的信息,最终得到以下字符串列表:
字符串列表如下所示:
0
0 PMID 22224631
1 Title -765 G_C and -1195 A_G promoter varia...
2 Found 8 gene(s)
3 Gene CRP Mentions
4 Gene GC Mentions
5 Gene PTGS2 Mentions
6 Found 1 variant(s)
7 Variant I399V URL
8 Gene PTGS1 Mentions
...
然后我被卡住了。。。。下一步如何将此字符串列表转换为我的目标表?我想使用Pandas,但它似乎只将每个字符串作为dataframe中的一行和一列
我走对了吗?如果是,我下一步该怎么办
如果没有,你对我应该如何处理这个问题有什么建议吗 我对Python不是很有经验,但我的方法是创建元组。
第一个手动创建的,使第一个
PMID |基因|变体
part,然后使用正则表达式剥离不必要的文本,并将这些元组添加到单个列表中。
然后使用字符串格式打印它们。
或者,你可以列出3个清单,一个是PMID,一个是基因,一个是变异。 然后用forloop迭代它们并打印出来以创建该表。
抱歉,无法提供具体提示。
致以最良好的祝愿 你可以使用字典 例如:
fileDict = {Gene : [], Variant: [], PMID: []}
遍历列表,检查是Gene、Variant还是PMID,并附加值
然后你就可以这样做了
for x in fileDict['Gene']:
print(x)
您可以按照以下步骤将文本文件转换为所需格式的数据框:
PMID Gene Variant
0 22224631 CRP No
1 22224631 GC No
2 22224631 PTGS2 I399V
3 22224631 PTGS1 L255L
4 22224631 PTGS1 V255V
5 22224631 CT49 No
6 22224631 GAA Q255H
7 22224631 CGA No
8 22224631 TAT No
9 16076618 AGTR2 No
10 16076618 QTRT1 No
11 16076618 SLC25A10 No
12 16076618 ATM No
13 16076618 PIH No
14 16076618 CCL14 No
15 16076618 AGT No
16 16076618 REN No
17 16076618 ASAH1 No
18 16076618 AGTR1 No
19 16076618 SSD No
20 16076618 TAT D389A
21 16076618 ACE D389A
22 16076618 ACE H389P
read\u csv()
导入文本文件。为了进行测试,我将上面粘贴的原始输入文本复制到一个新的文本文件中,并将其保存为raw_input.txt
: 0
0 PMID 22224631
1 Title -765 G_C and -1195 A_G promoter varia...
2 Found 8 gene(s)
3 Gene CRP Mentions
4 Gene GC Mentions
5 Gene PTGS2 Mentions
6 Found 1 variant(s)
7 Variant I399V URL
8 Gene PTGS1 Mentions
...
PMID
的信息: PMID Gene Variant
0 22224631 CRP No
1 22224631 GC No
2 22224631 PTGS2 I399V
3 22224631 PTGS1 L255L
4 22224631 PTGS1 V255V
5 22224631 CT49 No
6 22224631 GAA Q255H
7 22224631 CGA No
8 22224631 TAT No
9 16076618 AGTR2 No
10 16076618 QTRT1 No
11 16076618 SLC25A10 No
12 16076618 ATM No
13 16076618 PIH No
14 16076618 CCL14 No
15 16076618 AGT No
16 16076618 REN No
17 16076618 ASAH1 No
18 16076618 AGTR1 No
19 16076618 SSD No
20 16076618 TAT D389A
21 16076618 ACE D389A
22 16076618 ACE H389P
太神了非常感谢。没问题,很乐意帮忙!
output_df = pd.concat(df_list).reset_index(drop=True)
PMID Gene Variant
0 22224631 CRP No
1 22224631 GC No
2 22224631 PTGS2 I399V
3 22224631 PTGS1 L255L
4 22224631 PTGS1 V255V
5 22224631 CT49 No
6 22224631 GAA Q255H
7 22224631 CGA No
8 22224631 TAT No
9 16076618 AGTR2 No
10 16076618 QTRT1 No
11 16076618 SLC25A10 No
12 16076618 ATM No
13 16076618 PIH No
14 16076618 CCL14 No
15 16076618 AGT No
16 16076618 REN No
17 16076618 ASAH1 No
18 16076618 AGTR1 No
19 16076618 SSD No
20 16076618 TAT D389A
21 16076618 ACE D389A
22 16076618 ACE H389P