有两个多行文件,其中一个包含另外一个文件内容,如今的需求是要从大的文件里去掉包含行,问怎么破,这是今天一个技术群里有人问的问题,实现这个有其实有不少方法,我先给一个shell的解决方法,咱们假设fileone.txt文件包含filetwo.txt内容,shell方法以下:python
#!/bin/shshell
for i in `cat fileone.txt`app
doide
if ! grep $i filetwo.txt >/dev/null 2>&1spa
thenorm
echo $i >>newfile.txtip
fici
doneit
这样后生成的文件就去掉了filetwo.txt的包含的行,那若是要求两个文件都包含的行呢,那就在写一个脚本,如何要合并两个文件,并且要不能有重复行呢,那就再写一个脚本,发现随着需求变化,你不知不觉就整了好几个脚本,因此在实际工做中需求是多样的,其实上面说的内容,你们也应该感到熟悉,以上的操做其实就是咱们高中学的集合的概念,说到集合,那python里自己就带集合的数据类型,能够对集合的数据类型直接操做,那接下来咱们来看看若是用python来实现以上的需求:form
#!/usr/bin/evn python
def genset(fname):
flist = []
fi = open(fname)
for line in fi:
line = line.strip()
flist.append(line)
fi.close()
return set(flist)
if __name__ == '__main__':
s1 = genset('fileone.txt')
s2 = genset('filetwo.txt')
s3 = s1 - s2
fi = open('newfile.txt','a+')
for li in list(s3):
fi.write(li + '\n')
fi.close()
在python里集合的类型的这么使用的,假设咱们有集合s和t,基本操做以下:
一、联合(|),合并s和t造成一个新的集合,新集合的每一个元素都属于s,t的集合的其中之一成员。
二、交接(&),这个很容易理解,就是两个圆相交的部分,属于共同拥有的。
三、差补(-),这就是咱们例子中用到的,s-t 后的造成的新集合只属于s而不属于t,这样就在s中有t的给去掉了。
四、对称差分(^),这个造成新的集合成员要么属于s,要么属于t,但不能同时属于s和t.
熟练掌握了集合类型你们就能够在工做中灵活运用。