xiaofan1228 发表于 2020-2-20 21:14:05

【第29讲课后作业】假如两个文件行数不一致?

本帖最后由 xiaofan1228 于 2020-2-20 21:18 编辑

小甲鱼的答案

def file_compare(file1, file2):
    f1 = open(file1)
    f2 = open(file2)
    count = 0 # 统计行数
    differ = [] # 统计不一样的数量

    for line1 in f1:
      line2 = f2.readline()
      count += 1
      if line1 != line2:
            differ.append(count)

    f1.close()
    f2.close()
    return differ

file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')

differ = file_compare(file1, file2)

if len(differ) == 0:
    print('两个文件完全一样!')
else:
    print('两个文件共有【%d】处不同:' % len(differ))
    for each in differ:
      print('第 %d 行不一样' % each)


这是我写的
def compare(file1, file2):
    diff = []
    count = 0
    swich = "多"
    a = file1.readlines()
    b = file2.readlines()
   
    if len(a) < len(b):
      length = len(a)
      switch = "少"
      delta = len(b) - len(a)
    else:
      length = len(a)
      delta = len(a) - len(b)

    for each in range(length):
      if a == b:
            continue
      else:
            diff.append(each+1)
            count += 1

    file1.close()
    file2.close()
   
    if count == 0 and delta == 0:
      print("两个文件完全相同")
    else:      
      print("共有%d处不同:" %count)
      print("第一个文件比第二个文件%s%d行"%(switch,delta))
      for each in diff:
            print("其中第%d行不同"%each)
            

file1 = open("E:\\Python_homework\\29\\123.txt", encoding = 'UTF-8')
file2 = open("E:\\Python_homework\\29\\456.txt", encoding = 'UTF-8')

compare(file1, file2)


问题:
小甲鱼的答案没有考虑两个文档行数不一致的情况,
    for line1 in f1:
      line2 = f2.readline()
      count += 1
      if line1 != line2:
            differ.append(count)
这里假如f1比f2要少几行,那么后面都不会出现“不同了”

我是用的readlines()先把txt转化为列表然后比较的,如果length直接取两者之中最长的,会出IndexError: list index out of range,
所以在这种情况下,我增加了
print("第一个文件比第二个文件%s%d行"%(switch,delta))
因为我不知道怎么样能够在行数不一致的时候依然可以做出比较判断,
求指导

zltzlt 发表于 2020-2-20 21:17:22

这样试试:

def compare(file1, file2):
    diff = []
    count = 0
    switch = "多"
    a = file1.readlines()
    b = file2.readlines()

    if len(a) < len(b):
      length = len(a)
      switch = "少"
      delta = len(b) - len(a)
    else:
      length = len(a)
      delta = len(a) - len(b)

    for each in range(length):
      if a == b:
            continue
      else:
            diff.append(each + 1)
            count += 1

    file1.close()
    file2.close()

    if count == 0 and delta == 0:
      print("两个文件完全相同")
    else:
      print("共有%d处不同:" % count)
      print("第一个文件比第二个文件%s%d行" % (switch, delta))
      for each in diff:
            print("其中第%d行不同" % each)


file1 = open("E:\\Python_homework\\29\\123.txt", encoding='UTF-8')
file2 = open("E:\\Python_homework\\29\\456.txt", encoding='UTF-8')

compare(file1, file2)

冬雪雪冬 发表于 2020-2-20 21:56:55

def file_compare(file1, file2):
    f1 = open(file1)
    f2 = open(file2)
    differ = [] # 统计不一样的数量
    delta = len(a) - len(b)
    switch = "多" if delta > 0 else "少"
    a = file1.readlines()
    b = file2.readlines()
    for n, (i, j in enumerate(zip(a, b):
      if i != j:
            differ.append(n + 1)

    file1.close()
    file2.close()
   
    if differ = [] and delta == 0:
      print("两个文件完全相同")
    else:
      if delta:
            print("第一个文件比第二个文件%s%d行"%(switch,abs(delta)))
      ifdiffer:   
            print('两个文件共有【%d】处不同:' % len(differ))
            for each in differ:
                print('第 %d 行不一样' % each)
            

file1 = open("E:\\Python_homework\\29\\123.txt", encoding = 'UTF-8')
file2 = open("E:\\Python_homework\\29\\456.txt", encoding = 'UTF-8')

compare(file1, file2)

xiaofan1228 发表于 2020-2-21 00:52:15

冬雪雪冬 发表于 2020-2-20 21:56


大佬,思路真牛逼!!!我刚试了一下在enumerate那一行报错了。。。没接触过过这个函数,不知道怎么改。。。

冬雪雪冬 发表于 2020-2-21 09:12:33

xiaofan1228 发表于 2020-2-21 00:52
大佬,思路真牛逼!!!我刚试了一下在enumerate那一行报错了。。。没接触过过这个函数,不知道怎么改 ...

抱歉,写好了,没有运行调试,有不少错误
def file_compare():
    f1 = open("f:/py/1.txt", encoding = 'UTF-8')
    f2 = open("f:/py/2.txt", encoding = 'UTF-8')
    a = f1.readlines()
    b = f2.readlines()
    differ = [] # 统计不一样的数量
    delta = len(a) - len(b)
    switch = "多" if delta > 0 else "少"

    for n, (i, j) in enumerate(zip(a, b)):
      if i != j:
            differ.append(n + 1)

    f1.close()
    f2.close()
   
    if differ == [] and delta == 0:
      print("两个文件完全相同")
    else:
      if delta:
            print("第一个文件比第二个文件%s%d行"%(switch,abs(delta)))
      ifdiffer:   
            print('两个文件共有【%d】处不同:' % len(differ))
            for each in differ:
                print('第 %d 行不一样' % each)
            



file_compare()

xiaofan1228 发表于 2020-2-21 18:30:51

冬雪雪冬 发表于 2020-2-21 09:12
抱歉,写好了,没有运行调试,有不少错误

太强了,压根没想到differ本身也可以加上len()作为计数来用,学习了!
页: [1]
查看完整版本: 【第29讲课后作业】假如两个文件行数不一致?