有两个多行文件,其中一个包含另一个文件内容,现在的需求是要从大的文件里去掉包含行,问怎么破,这是今天一个技术群里有人问的问题,实现这个有其实有很多方法,我先给一个shell的解决方法,我们假设fileone.txt文件包含filetwo.txt内容,shell方法如下:

#!/bin/sh

 

for i in `cat  fileone.txt`

do

  if ! grep $i filetwo.txt >/dev/null 2>&1

  then

     echo $i >>newfile.txt

  fi

done

这样后生成的文件就去掉了filetwo.txt的包含的行,那如果要求两个文件都包含的行呢,那就在写一个脚本,如何要合并两个文件,而且要不能有重复行呢,那就再写一个脚本,发现随着需求变化,你不知不觉就整了好几个脚本,所以在实际工作中需求是多样的,其实上面说的内容,大家也应该感到熟悉,以上的操作其实就是我们高中学的集合的概念,说到集合,那python里本身就带集合的数据类型,可以对集合的数据类型直接操作,那接下来我们来看看如果用python来实现以上的需求:

#!/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,基本操作如下:

1、联合(|),合并s和t形成一个新的集合,新集合的每个元素都属于s,t的集合的其中之一成员。

2、交接(&),这个很容易理解,就是两个圆相交的部分,属于共同拥有的。

3、差补(-),这就是我们例子中用到的,s-t 后的形成的新集合只属于s而不属于t,这样就在s中有t的给去掉了。

4、对称差分(^),这个形成新的集合成员要么属于s,要么属于t,但不能同时属于s和t.

熟练掌握了集合类型大家就可以在工作中灵活运用。


©著作权归作者所有:来自51CTO博客作者mb5fdb12e4adbb2的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何检查列表中的值是否存在文件每行中?
  2. python获取文件md5
  3. Too many open files) when using LOCK TABLES
  4. 实现多文件上传案例 以及 MVC与依赖注入的原理
  5. oracle数据库存储文件结构功能解析
  6. 安卓布局文件
  7. 安卓自定义对话框的使用案例
  8. PHP实战:利用composer写一个MVC小框架
  9. PHP文件上传实战案例和MVC依赖注入和服务容器

随机推荐

  1. android 设置布局为无标题样式
  2. android 通过 button 弹出menu
  3. 【技术直通车】ArcGIS for Android地图控
  4. android stuido中修改最低sdk
  5. Android AIDL 理解及开发要点
  6. android ndk 入门3 - log实现
  7. 布局(2、相对布局)
  8. 监听android电话呼叫状态
  9. Android使用Google提供的地图实现定位时L
  10. Android实现自定义对话框(Dialog)