按Python

时间:2017-04-24 10:31:44

标签: python list python-3.x loops text

我编写了一个Python脚本,我试图过滤一些文本文件并将它们与另一个文本文件进行比较,但是我很难找到解决方案。

below | 1

above | 2

above | 3

above | 4

above | 5

below | 6

below | 7

below | 8

below | 9

below | 10

below | 11

below | 12

above | 13

below | 14

below | 15

below | 16

below | 17

below | 18

below | 19

below | 20

below | 21

...

我有此文件列出视频帧以及它们是否高于或低于定义的阈值。

此外,我列出了以上所列的'阈值帧,以及标记为(x,y或z)的用户定义值。不幸的是,此列表中的数字与初始上方或下方的帧编号不对应,而只是编号列表。

y | 1
x | 2
x | 3
y | 4
z | 5
z | 6
y | 7
z | 8
y | 9
y | 10
x | 11
x | 12
y | 13
x | 14
x | 15
x | 16
x | 17
x | 18
y | 19
x | 20
z | 21

我想将这两个结合起来,使上述帧的x,y或z值代替上面的'另一个脚本中的标记,如下所示:

below | 1

y | 2

x | 3

x | 4

y | 5

below | 6

below | 7

below | 8

below | 9

below | 10

below | 11

below | 12

z | 13

below | 14

below | 15

below | 16

below | 17

below | 18

below | 19

below | 20

below | 21

然而,我无法理解如何遍历列表来实现这一目标。我应该将值存储在字典中并迭代这些吗?任何帮助将非常感激。我尝试过使用for循环和open语句来尝试它但是我无法理解如何遍历它:

 with open((selectedvideostring + 'combinedfiles.txt'), 'w') as combinedfile:
    with open((selectedvideostring + 'aboveorbelow.txt'), 'r') as aboveorbelowfile:
        for line in aboveorbelowfile:
            if 'above' in line:
                with open((selectedvideostring + 'xyzfile.txt'), 'r') as xyzfile:
                    for line in xyzfile:
                        if 'x' in line:
                            combinedfile.write("x" + '|' + str(int(cap.get(1))))

                        elif 'y' in line:
                            combinedfile.write("y" + '|' + str(int(cap.get(1))))

                        if 'z' in line:
                            combinedfile.write("z" + '|' + str(int(cap.get(1))))

            elif 'below' in line:
                combinedfile.write("below" + '|' + str(int(cap.get(1))))

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该一次打开两个文件,而不是在外部上下文件循环内打开和迭代xyz文件。文件是迭代器,因此您可以使用db循环来迭代上方或下方文件中的行,并使用next只要遇到&时从xyz文件中获取下一行#34;上述"条目。

for

(使用with open("aboveorbelow.txt") as aob, open("xyzfile.txt") as xyz: for line in aob: if line.startswith("above"): ab, c = line.split(" | ") d, _ = next(xyz).split(" | ") print(" | ".join((d, c))) elif line.startswith("below"): print(line) 来简化测试,但当然同样适用于输出文件。)