在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
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”:)是的,这个解决方案是伟大的,因为我可以理解它。非常感谢你的帮助。