我有两个制表符分隔的文件,我需要用另一个文件中的所有行来测试第一个文件中的每一行。例如
文件1:
row1 c1 36 345 A
row2 c3 36 9949 B
row3 c4 36 858 C
文件2:
row1 c1 3455 3800
row2 c3 6784 7843
row3 c3 10564 99302
row4 c5 1405 1563
假设我想输出(file1)中的所有行,其中file1的col[3]小于file2的任何(不是所有)col[2],假设col[1]相同。
预期产量:
row1 c1 36 345 A
row2 c3 36 9949 B
因为我在Ubuntu工作,所以我希望input命令如下:python code.py [file1] [file2] > [output]
我写了以下代码:
import sys
filename1 = sys.argv[1]
filename2 = sys.argv[2]
file1 = open(filename1, 'r')
file2 = open(filename2, 'r')
done = False
for x in file1.readlines():
col = x.strip().split()
for y in file2.readlines():
col2 = y.strip().split()
if col[1] == col2[1] and col[3] < col2[2]:
done = True
break
else: continue
print x
但是,输出如下:
row2 c3 36 9949 B
这对于较大的数据集是显而易见的,但基本上我总是只得到嵌套循环中条件为真的最后一行。我怀疑“分手”会把我从两个圈子里都打垮。我想知道(1)如何脱离for循环中的一个,以及(2)这是否是我在这里遇到的唯一问题。
您需要将数字字符串解析为它们对应的整数值。
您可以按如下方式使用
int('hoge')
。break
和continue
应用于最里面的循环。问题是您只打开第二个文件一次,因此它只读取一次。当您第二次执行
for y in file2.readlines():
时,file2.readlines()
返回一个空的iterable。将
file2 = open(filename2, 'r')
移到外部循环中,或使用seek()
返回到file2
的开头。相关问题 更多 >
编程相关推荐