0

Python初学者,我已经熟悉阅读文件并进行基本操作。但是现在我想根据另一个文件过滤一个文件。我想过滤 file1 以删除 file2 的第 3 列中得分低于 100000 的任何行。我有一个主数据文件(file1):

7   303 0.207756232686981
16  23  0.208562019758507
6   57  0.208727272727273
7   80  0.209065354884048
11  124 0.209500609013398

我想制作一个与此相同的新数据文件,但根据第二个文件(file2)中的信息删除分数低于 100000 的任何行:

chr7    303 292526
chr16   23  169805
chr6    57  62822
chr11   124 320564
chr7    80  300291

两个文件的前两列包含确定该行是否在两个文件中引用相同大小写的信息。然而,第二个文件在每个数字之前添加了“chr”(这个“chr”可以忽略)。第一个文件中的所有行都存在于第二个文件中,但第二个文件中的某些行不在第一个文件中,可以忽略。

所以看看上面的例子:

6   57  0.208727272727273

将从新输出中删除,因为它在文件 2 的第 3 列中的值低于 100,000,而第一个文件中的所有其他行将包括在内,因为您的值超过 100000。对于输出文件维护与文件 1 相同的行顺序。

任何帮助将不胜感激。我通常使用的python结构

for line in inputfile:
        line = line.rstrip() 
        fields = line.split("\t")

所以建立这个结构的答案会特别好。

如果问题不清楚,请告诉我。

到目前为止的解决方案:

#!/usr/bin/env python



f2 = open( '/mnt/genotyping/CT/GreatApes/HKA/callability/callable_sites_per_region_500Kb.txt', 'r')
d2 = {}
print f2
for line in f2:
    line = line.rstrip()
    fields = line.split("\t")
    key = (fields[0].replace('chr', ''), fields[1])
    d2[key] = int(fields[2])





f1 = open( '/mnt/genotyping/CT/GreatApes/HKA/Barcelona_approach/500kb/cov_5/Homo-Gorilla/R_plots/Gorilla_genome_dist_cov5.txt', 'r')
for line in f1:
    line = line.rstrip()
    fields = line.split("\t")
    if 'region' not in line:
        key = (fields[0], fields[1])
        if d2[key] >= 100000:
            print line

谢谢

4

1 回答 1

2

我使用字符串而不是文件,但原理保持不变。1st,用file2的键创建一个dict:

>>> f2 = """chr7\t303\t292526
chr16\t23\t169805
chr6\t57\t62822
chr11\t124\t320564
chr7\t80\t300291"""
>>> d2 = {}
>>> for line in f2.split('\n'):
    line = line.rstrip()
    fields = line.split("\t")
    key = (fields[0].replace('chr', ''), fields[1])
    d2[key] = int(fields[2])


>>> d2
{('7', '303'): 292526, ('7', '80'): 300291, ('16', '23'): 169805, ('6', '57'): 62822, ('11', '124'): 320564}

然后只打印 file1 检查值的行d2

>>> f1 = """7\t303\t0.207756232686981
16\t23\t0.208562019758507
6\t57\t0.208727272727273
7\t80\t0.209065354884048
11\t124\t0.209500609013398"""
>>> for line in f1.split('\n'):
    line = line.rstrip()
    fields = line.split("\t")
    key = (fields[0], fields[1])
    if d2[key] >= 100000:
        print line


7   303 0.207756232686981
16  23  0.208562019758507
7   80  0.209065354884048
11  124 0.209500609013398
>>> 
于 2012-09-13T07:53:33.133 回答