寻找两个文件中相同的句子

先介绍问题描述:

已有两个文件a.datb.dat,每个文件都包含若干行句子,现在需要你编写python程序,来找到两个文件中相同的句子,完成:


1 将相同的句子打印到common.dat文件中,每行一句

2 在控制台打印出程序执行的时长,和相同句子的数量


算法1

采用循环查找方法,运行结果为:总共2500个重复的句子,运行总时长:118.077s 

代码如下:

import time

fileA = ‘/***/f1.dat’
fileB = ‘/***/f2.dat’
fileC = ‘/***/common2.dat’


def findSameSents(file1, file2, file3):
    f1 = open(file1, 'r')
    fa = f1.readlines()
    f1.close()
    f2 = open(file2, 'r')
    fb = f2.readlines()
    f2.close()
    f3 = open(file3, 'wb')
    time1 = time.time()
    count = 0

    fc = [i for i in fa if i in fb]

    f3.writelines(fc)
    print len(fc)
    time2 = time.time()
    time3 = time2 - time1
    f3.close()
    print time3


if __name__ == '__main__':
    findSameSents(fileA, fileB, fileC)

算法2:采用集合set,分别将两个文件读入集合,求两个集合的交集,并将交集写入文件common。交集的长度即为所求个数。运行结果:重复句子2500个,运行失常大大缩减至最快190ms 

代码如下:

import time

fileA = '/***/data/f1.dat'
fileB = '/***/data/f2.dat'
fileC = '/***/data/common3.dat'


def findSameSents(file1, file2, file3):
    f1 = open(file1, 'r')
    str1 = []
    str2 = []

    for line in f1.readlines():
        str1.append(line.replace('\n', ''))
    set1 = set(str1)
    f1.close()

    f2 = open(file2, 'r')
    for line in f2.readlines():
        str2.append(line.replace('\n', ''))
    set2 = set(str2)
    f2.close()

    set3 = set1 & set2
    print len(set3)
    f3 = open(file3, 'wb')
    for i in set3:
        f3.write(i)

    f3.close()


if __name__ == '__main__':
    time1 = time.time()
    findSameSents(fileA, fileB, fileC)
    time2 = time.time()
    print time2 - time1


算法3:在算法2的基础上,对读取文件数据的处理方式进一步改进,下面是改进后的代码,改进后运行时间仅一步缩短至100ms左右。 


def findSameSents(file1, file2, file3):
    set1 = set()
    set2 = set()

    with open(file1, 'r') as f1:
        for l in f1:
            set1.add(l)

    with open(file2, 'r') as f2:
        for l in f2:
            set2.add(l)

    set3 = set1 & set2
    print len(set3)

    with open(file3, 'wb') as f3:
        for i in set3:
            f3.write(i)


其中,关于算法2中的f3.write(i)语句,为什么没有加入换行符,即f3.wriye(i + ‘\n’)就可以在写入的文件中自动换行的问题?通过单步调试,得出如下原因,如下图所示。

是因为,原来文件中每行语句的末尾都包含有一个回车符\r和一个写入的语句i里面,而我刚开始在算法2里面,只是替换了其中的换行符\n,并没有对回车符\r进行变换,所以写入文件的时候被行末的\r自动换行了。  




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值