繁体   English   中英

计算在距参考文件一定时间间隔的数据文件中有多少次读取。 蟒蛇

[英]Count how many reads in a data file are in an interval from reference file. Python

我试图计算一个文件(列)中某个值的命中数介于另一个文件(两列)之间的间隔。

我完全迷住了如何映射它。

我尝试过这样的事情:

for line in file1:
    if line[0]=line2[0] and line2[1]<line[1]<line2[2]:
    print line

我不确定这是否正确。

file 1:
elem1     39887
elem1     72111

file 2:
elem1     1     57898
elem1     57899 69887
elem2     69888 82111

在file1中,elem1是我项目中的一个元素。 值39887是开始坐标。

在file2中,elem1仍然是我项目中的一个元素,但是值是开始和结束坐标。 File2只是一个参考文件。

对于文件2中的每一行,我想查看文件1中的“ elem#” ==“ elem#”。如果file1中的elem#等于file2中的elem#,那么我想在此循环中继续并查看如果file1中的对应值在file2中的开始和结束位置之间。

例如,在file1的第一行中,elem1 == elem1在file2的第一行中。 由于它们相等,因此39887在1到57898之间吗? 是的,所以算一下。 我需要对file2中的每一行执行此操作。

最后,我想看看file2的每组坐标中有多少个元素。

假设您的行一对一匹配(因此,您想测试一个文件的第一行的值是否位于另一个文件的第一行,第二行到第二行的值之间,等等),可以zip这两个文件将在步骤中对其进行迭代:

with open(...) as interval_file, open(...) as value_file:
    for value, interval in zip(interval_file, value_file):
        left, right = map(int, interval.split())
        if float(left) <= float(value) <= float(right):
            #do stuff

暂时放弃“文件”的概念,然后考虑数据。

您有两组文本数据,一组是一列,一组是两列,对吗? 假设您可以计算出一秒钟的时间来将文本分成两个列,那么您真正拥有的就是三个列表(将字符串转换为ints后再说):

c1 = [random.randint(0,100) for i in range(100)]     
c2 = [random.randint(0,100) for i in range(100)]
c3 = [random.randint(0,100) for i in range(100)]

据我了解,您想计算c2和c3中c1中数据的间隔命中率,对吗? 现在关注“命中”是什么。 如果您在c1中拥有3 ,并且在c2中拥有[1,3,5,5,3,10] ,那这是多少次匹配? 只有3个? 1,3,5之间的间隔? 还是1,3,5,5,3的间隔? 或以上所有。

作为一个简单的示例,使用上面的randoms int列表,将打印出c1和c2中都出现的int中的每个int:

for i in c1:
    if i in c2 and i in c3:
        print i 

一旦您进一步定义“命中”是什么,此基本结构便会起作用。 基本数据和“命中”结构正常工作后,请返回并处理文件。 那应该很容易。

编辑: 如果我了解您要做什么(这是一个很大的if ),那么这是一个框架:

with open("file2.txt") as val_file:
    for val_line in val_file:
        val_elems=val_line.split()
        with open("file1.txt") as int_file:
            for int_line in int_file:
                int_elems=int_line.split()
                if (int_elems[0] == val_elems[0] and 
                    int_elems[1] > val_elems[1] and
                    int_elems[1] < val_elems[2]):
                        print val_line

针对您的样本数据运行,输出: elem1 1 57898

我不清楚您是否尝试1)逐行比较两个文件,或者2)读取文件2的每一行并与文件1的每一行进行比较。下面的示例在后面做。

暂无
暂无

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

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