2016-06-03 2 views
-1

현재 월별로 실행되는 VM 양이 갑자기 바뀌는 것을보고 나에게 경고하는 프로세스를 자동화하려고합니다. 여기에 내가 기본적으로 두 개의 서로 다른 파일을 열고, 파이썬 격차를 두 파일 사이의 숫자와 각 라인을 갖고 싶어 두 파일 사이에 다른 라인 나누기

January.txt    February.txt 

Web Fleet     Web Fleet 
100      112 
Proxy Fleet    Proxy Fleet 
25      22 
Beta Fleet    Beta Fleet 
12      10 

같은 데이터가 모습입니다. 거기에서, 나는 "< = 1이면 알람"이라고 말할 수 있습니다. 하지만 두 개의 서로 다른 파일간에 모든 다른 줄을 수행하는 방법을 알아낼 수는 없습니다. 일반적으로 나는 bash에서이 작업을 수행 할 것이지만 현재 파일을 생성하고이 데이터를 얻기 위해 다른 작업을 수행하는 현재 실행중인 python 스크립트에서 전체 프로세스를 유지하려고합니다. 그래서, 데이터는 같은 순서로 항상, 웹 함대 항상 상단에, 프록시 함대 항상 둘째 : 여기

일종의

paste January.txt feburary.txt | awk 'NR%2==0' | awk '{ print $1/$2 }' 

편집 bash는 작업 겠어요 방법의 샘플입니다 에 등등.

+0

는 파일의 라인이 항상 일치합니까, 또는 당신은 당신의 코드들이 일치하도록을해야합니까? 그들이 이미 일치하는 경우, 나는'zip'이 여러분이 원하는대로 대부분을 할 것이라고 의심합니다. – Blckknght

+0

그들은 항상 일치합니다. Python 스크립트는 한 번에 한 세트 씩 쿼리를 수행하여이를 확인합니다. – Mallachar

+0

FYI 샘플 코드는 다음과 같이 작성할 수 있습니다 :'paste January.txt feburary.txt | awk 'NR == FNR {a [NR] = $ 0; 다음에} FNR % 2 == 0 {print [FNR]/$ 1}' jan.txt feb.txt' – andlrc

답변

1

코드 -

with open('January.txt', 'r') as f1, open('February.txt', 'r') as f2: 
    for x, y in zip(f1.read().splitlines()[1::2], f2.read().splitlines()[1::2]): 
     print(float(x)/int(y)) 

출력 -

0.8928571428571429 
1.1363636363636365 
1.2 
+2

파이썬 2.7로 작업하고 있다면 float division이 필요합니다. 그렇지 않으면 int 응답을 얻을 것입니다 ... – pekapa

+0

@pekapa 맞습니다. 나는 그것을 명시해야한다. –

+0

@pekapa이 (가) 편집했습니다. 이제는 파이썬 2와 3 모두에서 작동합니다. –

0

그런 다음 한 번에 2 줄을 이동 반복 함께 zip에게, 선행을 두 파일의 내용을 읽어 아마 간단 :

with open("jan.txt") as file1: 
    with open("feb.txt") as file2: 
     lines = zip(file1.readlines(), file2.readlines()) 
     for line1, line2 in lines[1::2]: 
      val1 = float(line1.strip()) 
      val2 = float(line2.strip()) 
      print val1/val2 

[1::2] 비트는 인덱스 1에서 시작하여 2 시간

파일 내용을 선행 읽지 않습니다 대안 구현의 항목 :

with open("jan.txt") as file1: 
    with open("feb.txt") as file2: 
     while True: 
      file1.readline() 
      file2.readline() 
      line1 = file1.readline() 
      line2 = file2.readline() 
      if line1 == "" or line2 == "": 
       break 

      val1 = float(line1.strip()) 
      val2 = float(line2.strip()) 
      print val1/val2 
관련 문제