繁体   English   中英

根据另一个文件中的值过滤一个文件

Filter one file based on values in another

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

谢谢

1 个回复

我使用字符串而不是文件,但原则保持不变。 1,用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}

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

>>> 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
>>> 
1 根据另一个文件的列中的值过滤文件

我有一个包含位置列表(列1 + 2)和与这些位置关联的值的文件: File1.txt: 和另一个具有某些相同位置的文件。 可能有多行与File1.txt中的位置相同 File2.txt 我需要输出File1.txt的版本,但不包括同时满足这两个条件的任何行: ...

2 根据另一个过滤一个文本文件

星期五下午,我正在努力根据另一个文件的内容过滤一个文件。 我有一个带有制表符分隔值列表的文件,例如 和另一个带有制表符分隔值的文件,例如 我想过滤第二个文件,使其仅在第一个文件中包含位置。 当前,第二个文件中有多余的行,其中一些需要删除。 位置信息来自第一个文件组合的第一和 ...

3 使用Unix根据另一个文件中存在的值从一个文件中过滤记录

我有一个输入CSV文件输入提要 从此输入文件生成的输出错误csv文件具有主键 错误档案 我想从输入文件中提取所有记录,并将其保存到错误文件中有主键条目的新文件中。 基本上,我的新文件应如下所示: 新输入提要 我是Unix的初学者,我尝试过Awk命令。 ...

4 如何根据另一列的值过滤一列?

对于长篇文章,我深表歉意。 这是几个案例陈述,使它变得很长。 我有两个问题。 第一个是-我如何从表中获取所有值,又如何在自联接中针对自身过滤呢? 具体来说,我计算的是推销员每天的通话次数,而我的输出则持续减少凌晨12点和凌晨1点。 第二个问题是-如何根据另一列的值过滤一列? ...

2017-10-15 16:32:56 1 38   mysql/ sql
5 如何使用VBA根据另一个表的值过滤一个表?

我有映射表“数据”,第一列显示组,第二列是虚拟的(是否使用“输出”表中的该组),第三列显示行数 和显示输出“输出”的表,其中的列显示每个组的值 我希望决赛桌看起来像 在我的代码中,我尝试从“数据”表的第3列中选择值(代码中的ploeg2值),然后将它们用作“输出”表中列选择的索引。 但是 ...

2021-03-29 13:13:56 0 18   excel/ vba
7 根据另一个表列中的值过滤一个表

我有一个包含两列(materialID |名称)的表“ PackagingType”,以及另一个具有ID和材料详细信息的表“ materials”。 我要为“包装类型”中的每个名称分配可用的物料(例如,在物料ID列中,我将拥有1,3,4,5)。 我需要将这些materialsID与m ...

8 如何根据另一个数据集中的值过滤一个数据集中的日期和时间

假设以下数据集(称为Active )包含个人在几天内进入和离开房间的日期和时间记录。 个人由唯一的ID表示, Start是他们进入房间的时间, End是他们离开房间的时间。 现在我们有另一个数据集(称为Detections ),其中包含在房间中看到每个人( ID )的时间: 请注意,在某些情 ...

9 CakePHP:根据另一个表中的值过滤对一个表的搜索

我有一个包含用户信息的表,型号名称为User 用户模型链接到另一个称为记录的模型 我的控制器中还有一个例程,可以根据某些条件查找用户。 这对于返回用户的下拉列表很好。 我现在需要做的是根据记录模型中是否有一个或多个记录来进一步过滤用户列表。 如果没有,则不应出现。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM