在python中查找两个整数之间的值

在python中查找两个整数之间的值,python,awk,Python,Awk,我有以下两个文件 如果文件1的第二列与文件2的第一列匹配 如果文件2的第二列位于文件1的第三列和第四列的间隔内,则按输出进行打印 我试图为此编写一个python脚本,但我不知道如何对其进行公式化 File 1: a2 sca4 15 20 b3 sca4 22 30 c4 sca6 45 65 File 2: sca4 17 sca4 18 sca4 19 sca6 46 output: a2 sca4 17 15 20 a2 sca4 18 15 20 a2 sca4 19 15

我有以下两个文件

  • 如果文件1的第二列与文件2的第一列匹配
  • 如果文件2的第二列位于文件1的第三列和第四列的间隔内,则按输出进行打印
  • 我试图为此编写一个python脚本,但我不知道如何对其进行公式化

    File 1:
    
    a2 sca4 15 20
    b3 sca4 22 30 
    c4 sca6 45 65
    
    File 2:
    
    sca4 17
    sca4 18
    sca4 19
    sca6 46
    
    output:
    
    a2 sca4 17 15 20
    a2 sca4 18 15 20
    a2 sca4 19 15 20
    c4 sca6 46 45 65
    

    试着这样做:

    import sys
    
    def process_files(one, two):
        for line in [line.strip().split(" ") for line in open(two, 'r').readlines()]:
            for x in filter(lambda x: x[1] == line[0], [z.strip().split(" ") for z in open(one, 'r').readlines()]):
                if int(x[2]) <= int(line[1]) <= int(x[3]):
                    print(" ".join(x))
    
    if __name__ == "__main__":
        process_files(sys.argv[1], sys.argv[2])
    

    导入系统 def过程_文件(一个,两个): 对于[line.strip().split(“”)中的行,对于处于打开状态的行(两个'r')。readlines()]: 对于过滤器中的x(λx:x[1]==行[0],[z.strip().split(“”)表示打开的z(一个'r')。readlines()]):
    如果int(x[2]),我将使用
    dict
    获取文件2中可用的每个索引,然后遍历文件1

    ff = file("file2", "r")
    file2 = ff.readlines()
    ff.close()
    dict_f2 = dict()
    for line in file2:
       ll = line.strip().split(" ")
       if (ll[0] in dict_f2):
           dict_f2[ll[0]].append(int(ll[1]))
       else:
           dict_f2[ll[0]] = list()
           dict_f2[ll[0]].append(int(ll[1]))
    
    ff = open("file1", "r")
    file1 = ff.readlines()
    ff.close()
    for line in file1:
        ll = line.strip().split(" ")
        if (ll[1] in dict_f2):
            sup = int(ll[4])
            inf = int(ll[3])
            for (comp in dict_f2[ll[1]]):
                if (comp >= inf and comp <= sup):
                    print(line[0:2] + str(comp) + line[2:])
    
    ff=file(“file2”、“r”)
    file2=ff.readlines()
    ff.close()
    dict_f2=dict()
    对于文件2中的行:
    ll=line.strip().split(“”)
    如果(dict_f2中的ll[0]:
    dict_f2[ll[0]].追加(int(ll[1]))
    其他:
    dict_f2[ll[0]]=list()
    dict_f2[ll[0]].追加(int(ll[1]))
    ff=打开(“文件1”、“r”)
    file1=ff.readlines()
    ff.close()
    对于文件1中的行:
    ll=line.strip().split(“”)
    如果(第2部分中的ll[1]):
    sup=int(ll[4])
    inf=int(ll[3])
    (以书面形式提交[ll[1]]):
    
    如果(comp>=inf和comp,我会使用类似Math的解决方案,除了用于文件读取的
    with
    语句

    file2_dict = {}
    with open("file2.txt") as fo:
        file_contents = fo.read()
        for line in file_contents.split("\n"):
            if not line.strip():
                continue
            key, value = line.strip().split(" ", 1)
            if key not in file2_dict:
                file2_dict[key] = []
            file2_dict[key].append(int(value))
    
    output_string = ""
    with open("file1.txt") as fo:
        file_contents = fo.read()
        for line in file_contents.split("\n"):
            if not line.strip():
                continue
            name, id, min, max = line.strip().split(" ")
            for value in file2_dict.get(id, []):
                if int(min) < value < int(max):
                    output_string += line.replace(id, "%s %d" % (id, value))
                    output_string += "\n"
    
    print output_string
    
    file2_dict={}
    以open(“file2.txt”)作为fo:
    文件内容=fo.read()
    对于文件\u contents.split(“\n”)中的行:
    如果不是line.strip():
    持续
    键,值=line.strip().split(“,1)
    如果注册表项不在文件2中,请输入:
    文件2_dict[key]=[]
    file2_dict[key].append(int(value))
    输出_字符串=“”
    打开(“file1.txt”)作为fo:
    文件内容=fo.read()
    对于文件\u contents.split(“\n”)中的行:
    如果不是line.strip():
    持续
    名称、id、最小值、最大值=line.strip().split(“”)
    对于file2_dict.get(id,[])中的值:
    如果int(min)
    第二列字符串在文件2中是唯一的还是重复的?在您的示例中,
    sca4
    在文件1中出现两次,但在文件2中仅出现一次。文件2中的第二列数字是唯一的。也就是说,我可以多次使用sca4,但文件1中的间隔中存在不同的数字。我编辑了我的问题。我也在尝试,但需要编辑我的代码以显示我迄今为止所做的尝试。感谢您的解决方案。使用
    过滤器
    lamda
    对我来说太高级了,请您解释一下代码好吗?基本上,我们采用“文件B”中的所有行。对于每一行,我们从“文件A”中的行集合中筛选出与第一个元素不匹配的行。在修剪该集合后,我们检查“文件A”中的行(过滤后)是否与第二个条件(即第三列和第四列条件)匹配;如果是这样,我们打印匹配的行。我不是想成为一个大头。如果某个主题似乎很高级,最好是学习它们。对于Python,任何主题都可以快速学习。不仅是为了关闭连接,而且对我来说,with语句似乎比文件打开和关闭更“Python”:)是的,这个解决方案是伟大的,因为我可以理解它。非常感谢你的帮助。