Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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_Bash_Shell_Unix - Fatal编程技术网

Python 使用从第一列派生的关系从两列文件的第二列构造边列表

Python 使用从第一列派生的关系从两列文件的第二列构造边列表,python,bash,shell,unix,Python,Bash,Shell,Unix,我有一个问题,我有一个文件,上面有几百万行这样排列: 1 Protein_A 1 Protein_B 2 Protein_A 3 Protein_C 4 Protein_A 4 Protein_B 4 Protein_C 4 Protein_D 5 Protein_C 5 Protein_D 其中第1列表示相互作用途径,第2列表示蛋白质的ID。有人能推荐一种有效的方法吗?我可以将其分类为每个网络中仅包含(非互惠)相互作用的边缘列表,

我有一个问题,我有一个文件,上面有几百万行这样排列:

1    Protein_A
1    Protein_B
2    Protein_A 
3    Protein_C
4    Protein_A
4    Protein_B
4    Protein_C
4    Protein_D
5    Protein_C
5    Protein_D
其中第1列表示相互作用途径,第2列表示蛋白质的ID。有人能推荐一种有效的方法吗?我可以将其分类为每个网络中仅包含(非互惠)相互作用的边缘列表,例如:

1    Protein_A,Protein_B
4    Protein_A,Protein_B
4    Protein_A,Protein_C
4    Protein_A,Protein_D
4    Protein_B,Protein_C
5    Protein_C,Protein_D
5    Protein_C,Protein_D
或者告诉我在哪里可以找到这些数据

我尝试了一个shell脚本,它缓慢地遍历文件并删除文件末尾的新行,结果如下:

1    Protein_A    1    Protein_B
这可以被加工成一个边缘,但是如果一个网络中有两个以上的蛋白质,这就不起作用了。我画的是空白。有人能帮忙吗


提前谢谢。

使用python和一些智能模块相当简单。我已将文件内容嵌入到字符串中。只需替换为
data=open(“input.txt”)
即可从文件中读取(也可读取)

我创建了一个以数字为键的字典,并将与数字匹配的蛋白质列表作为值

构建完成后,我使用大小为2的
itertools.compositions
生成列表,同时打印密钥

import re
import collections,itertools

data="""1    Protein_A
1    Protein_B
2    Protein_A
3    Protein_C
4    Protein_A
4    Protein_B
4    Protein_C
4    Protein_D
5    Protein_C
5    Protein_D""".split("\n")

d = collections.defaultdict(lambda : list())

for l in data:
    fields = re.split("\s+",l.strip())
    d[int(fields[0])].append(fields[1])

for k,v in d.items():
    for a,b in itertools.combinations(v,2):
        print(k,a,b)
结果:

(1, 'Protein_A', 'Protein_B')
(4, 'Protein_A', 'Protein_B')
(4, 'Protein_A', 'Protein_C')
(4, 'Protein_A', 'Protein_D')
(4, 'Protein_B', 'Protein_C')
(4, 'Protein_B', 'Protein_D')
(4, 'Protein_C', 'Protein_D')
(5, 'Protein_C', 'Protein_D')