Python 输出总是给出最后一行或所有行
我有两个以制表符分隔的文件,我需要对照另一个文件中的所有行测试第一个文件中的每一行。比如说, 文件1:Python 输出总是给出最后一行或所有行,python,csv,Python,Csv,我有两个以制表符分隔的文件,我需要对照另一个文件中的所有行测试第一个文件中的每一行。比如说, 文件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 假设我想输出
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中工作,我希望输入命令如下所示:
python code.py[file1][file2]>[output]
我编写了以下代码:
import sys
filename1 = sys.argv[1]
filename2 = sys.argv[2]
file1 = open(filename1, 'r')
done = False
for x in file1.readlines():
col = x.strip().split()
file2 = open(filename2, 'r')
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
基本上,我总是只得到嵌套循环中条件为真的最后一行。我试过这样做:
if done == True: print x
(使用一个缩进),但现在它打印file1中的所有行,而不考虑上一个循环中测试的条件。(>您忘记在第一次匹配后重置
done
变量,在这种情况下不需要该变量。要修复代码,只需将done=True
替换为print x
,并使用int(col[3])
将列作为数字(整数)进行比较
if done == True: print x