在两个文件之间划分每隔一行

时间:2016-06-03 23:35:27

标签: python bash division

我正在尝试自动化一个过程,如果我们看到每月运行的虚拟机数量突然发生变化,就会发出警报。这是数据的样子

January.txt               February.txt

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

我基本上想要打开两个不同的文件,并让python将每行与两个文件之间的数字分开。从那里,我可以说"如果< = 1则报警"之类的事情。但我似乎无法弄清楚如何告诉它做两个不同文件之间的每一行。通常我会在bash中执行此操作,但我试图将整个过程保留在当前正在运行的python脚本中,该脚本当前生成文件并执行一些其他任务来获取此数据。

以下是我使用bash

进行处理的一种方式示例
paste January.txt feburary.txt | awk 'NR%2==0' | awk '{ print $1 / $2 }'
编辑:数据始终处于相同的顺序,Web Fleet始终位于顶部,Proxy Fleet始终位于第二,依此类推。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

预先读取两个文件的内容可能更简单,zip将它们放在一起,然后一次迭代移动2行:

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