【问题标题】:How to loop and compare pairs of lines?如何循环和比较成对的线?
【发布时间】:2017-07-04 13:44:48
【问题描述】:

我有 2 个这样的文件。

文件 1

e 1 0 ppp
e 3 1 rrr
e 3 2 rrr

文件 2

e 1 0 rrr

我想拆分每一行代码来比较数组[3],如果相同的 rrr 在行中,它应该打印OK。我是这样写代码的。

file1 = open('file1.txt', 'r', encoding="utf8")
file2 = open('file2.txt', 'r')

for line1 in file1:     #loop file1

    L1 = line1.split()   #split to array

    if(L1[0] == 'e'):
        print("line1 " + line1)

        for line2 in file2:  #loop file2

            L2 = line2.split()   #split to array

            if(L2[0] == 'e'):
                print("line2 " + line2)

                if(L2[3] == L1[3]):  #check rrr same

                    print("OK")

当我运行代码时,它会打印:

line1 e 1 0 ppp
line2 e 1 0 rrr
line1 e 3 1 rrr
line1 e 3 2 rrr

代码是循环中的循环我想显示这样的结果:

line1 e 1 0 ppp
line2 e 1 0 rrr
line1 e 3 1 rrr
line2 e 1 0 rrr
line1 e 3 2 rrr
line2 e 1 0 rrr

如何修改代码来比较文件的每一行?

【问题讨论】:

  • 文件对象迭代器只适用于一次通过。我相信这是你的问题。

标签: python python-3.x loops file-handling


【解决方案1】:

基本上,您需要跟踪两个文件的最后一行。如果任何文件较小并且在另一个文件之前完成迭代。 您需要将当前行与其他文件中的上一行进行比较。

这个怎么样?

prev_f1_token = None
prev_f1_line = None

prev_f2_token = None
prev_f2_line = None

with open('file1.txt') as f1:
    with open('file2.txt') as f2:
        for line in f1:
            prev_f1_token = line[0]
            prev_f1_line = line
            for line in f2:
                prev_f2_token = line[0]
                prev_f2_line = line

            if(prev_f1_token == 'e'):
                print("line1 ", prev_f1_line)

            if (prev_f2_token == 'e'):
                print ("line2 ", prev_f2_line)

                if(prev_f2_line.split()[3] == prev_f1_line.split()[3]):  #check rrr same
                        print("OK")

【讨论】:

    【解决方案2】:

    您编写的代码比需要的多,如果您的代码缩进这么多,继续下去并不总是一个好主意。这是我尝试打印您想要的内容,我相信这可以缩短更多!

    你可以在这里使用itertools.cycle(如果列表较短,它会返回一个循环迭代器)

    import itertools
    f1, f2 = open('file1.txt', 'r'), open('file2.txt', 'r')
    file1, file2 = f1.read().split(), f2.read().split()
    if len(file1) > len(file2):
        file2 = itertools.cycle(file2)
    else:
        file1 = itertools.cycle(file1)  
    print '\n'.join(['line1 '+i+'\nline2 '+j for i,j in zip(file1, file2)])
    f1.close();f2.close()
    

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2019-03-01
      相关资源
      最近更新 更多