首页 > 解决方案 > 当两个文件的最后一位相同时打印行

问题描述

我有一个文件1

AI21T A1,A2,B,Zn |3
AN3DT A1,A2,Z |2
AO22T A1,A2,B,Z |3
BUFF1 I,Z |1

和 file2 作为

AO22T A1,A2,B,Z |3

我想将 file2 的最后一位与 file1 的最后一位进行比较,如果匹配,则从 fout 文件中的 file1 打印该匹配行。输出应该是 fout

AI21T A1,A2,B,Zn |3
AO22T A1,A2,B,Z |3

我试过代码


f1=open("file1","r")
f2=open("file2","r")
fo=open("fout","w")
  for line1 in f1:
     l1=line1.strip()
     for line2 in f2:
        l2=line2.strip()
        if l1[-1:].isdigit()==l2[-1:].isdigit():
           data=f1.readlines()
   print >> fo,data

但是在比较和写入文件时出现错误。

标签: python

解决方案


假设您首先将数据放入类似于以下内容的列表中:

f1 =[
    "AI21T A1,A2,B,Zn |3",
    "AN3DT A1,A2,Z |2",
    "AO22T A1,A2,B,Z |3",
    "BUFF1 I,Z |1"
]

f2 = [
    "AO22T A1,A2,B,Z |3"
]

这将使您可以轻松地循环遍历文件的数据,而不必担心换行符。

然后,您可以遍历 file1 中的数据并遍历 file2 中的数据:

for line1 in f1:
    for line2 in f2:
        if line1[-1] == line2[-1]: # compare the last digit of each line
            # write to file, etc.

如果您正在寻找单行,您可以使用 list-comprehension 创建一个新列表,其中包含 file1 中与 file2 中的行具有共同最后一位的所有行:

common = [line1 for line1 in f1 for line2 in f2 if line1[-1] == line2[-1]]

输出:

['AI21T A1,A2,B,Zn |3', 'AO22T A1,A2,B,Z |3']

然后,您可以轻松地写入文件:

for line in common:
    fo.write(f"{line}\n")

推荐阅读