2013-09-01 2 views
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 

하는의 내가 내지 컬럼 [3] 파일 1의보다 작은있는 (파일 1) 출력의 모든 행을 싶습니다 가정 해 봅시다 예,

파일 1의 경우 col [1]이 동일하다면 file2의 col (2)가 아닌 모든 col (2).

예상 출력 : 나는 우분투하고 있어요 때문에

row1 c1 36 345 A 
row2 c3 36 9949 B 

, 내가 같이하기 위해 입력 명령을 싶습니다 파이썬 code.py [파일 1] [파일 2]> [출력]

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 

그러나, 출력은 다음과 같습니다 :

나는 다음과 같은 코드를 작성3210

row2 c3 36 9949 B 

기본적으로 항상 중첩 루프의 조건이 참인 마지막 행만 가져옵니다.

if done == True: print x 

(들여 하나),하지만 지금에 관계없이 이전 루프에서 테스트 조건, 파일 1의 모든 행을 인쇄 : 내가 대신이 시도. (> _ <)

답변

3

첫 번째 일치 후 done 변수를 재설정하는 것을 잊었으며이 경우 변수가 필요하지 않습니다. 코드를 수정하려면 done = Trueprint x으로 대체하고 int(col[3]) < int(col2[2])을 사용하여 열을 숫자 (정수)로 비교하십시오.

관련 문제