# -*- coding: utf-8 -*-
# 作者:新手
__author__ = 'Administrator'
#文件的比较
import os,filecmp
#作用用于比较系统中的目录和文件
#例子2
def mkfile(name,body=None):
    with open(name,'w')as name1:
        name1.write(body or name)
    return
def mk_dir(top):
    if not os.path.exists(top):
        os.mkdir(top)
    curdir=os.getcwd()
    os.chdir(top)
    os.mkdir('dir1')
    os.mkdir('dir2')
    mkfile('dir1/file_only_in_dir1')
    mkfile('dir2/file_only_in_dir2')
    os.mkdir('dir1/file_only_in_dir1')
    os.mkdir('dir2/file_only_in_dir2')
    os.mkdir('dir1/common_file')
    os.mkdir('dir2/common_file')
    mkfile('dir1/common_file','this file is the same')
    mkfile('dir2/common_file','this file is the same')
    mkfile('dir1/not_the_same')
    mkfile('dir2/not_the_same')

mkfile('dir1/file_in_dir1','This is a file in dir1')
    os.mkdir('dir2/file_in_dir1')

os.chdir(curdir)
    return
if __name__=='__main':
    os.chdir(os.path.dirname(__file__)or os.getcwd())
    print mk_dir('example1')
    print mk_dir('example1/dir1/common_dir')
    print mk_dir('example1/dir2/common_dir')

#比较目录/文件
print u'比较:',filecmp.cmp(r'a\a.txt',r'a\b.txt',shallow=True)
print u'比较:',filecmp.cmp(r'a\a.txt',r'a\1.doc',shallow=True)
"""
shallow解释:参数它会cmp()除了文件元数据外,是否还要查看文件内容,默认情况下使用os.stat()得到信息完成一个浅比较,而不查看内容,对于同时创建的相同大小文件,如果不比较其内容,会报告错误
如果非递归比较2个目录中一组文件,可以使用cmpfiles(),参数是目录名和2个位置上检查的文件列表
,传入公共文件列表应当只包含文件名(目录会导致匹配不成功),而且这些文件在2个位置上都应当出现,
"""
#例3
d1_contents=set(os.listdir(r'a'))
d2_contents=set(os.listdir(r'a'))
com=list(d1_contents & d2_contents)
f=[f for f in com if os.path.isfile(os.path.join(r'a',f))]
print f
a,b,c=filecmp.cmpfiles(r'a',r'a',f)
print a,b,c
#comfiles()返回3个文件列表,分别包含匹配文件,不匹配文件和不能比较文件(由于权限或者出于其他原因)
#比较目录:report()会打印比较2个目录的报告
filecmp.dircmp(r'a',r'a').report()
"""
它是输出一个纯文本报告,显示结果只包括给定目录内容,而不会递归比较其子目录,在这边,文件(a)被认为是相同的,因为并没有比较内容,无法让dircmp像cmp()那样比较
想要完成详细的递归比较,可以使用report_full_closure()
"""
filecmp.dircmp(r'a',r'a').report_full_closure()
#将输出包括所有同级子目录的比较

#程序中使用差异
#在请求计算时,对于未使用的数据,创建dircmp实例并不会带来开销
import pprint
dc=filecmp.dircmp(r'a',r'a')
print 'left:',
pprint.pprint(dc.left_list)
print '\nrigjt:'
pprint.pprint(dc.right_list)
#比较目录中包含文件和子目录分别列表left_list和right_list中
#可以向构造函数传入一个要忽略名字列表(该列表中指定的名字将被忽略),对输入进行过滤,默认情况下 ,RCS CVS和tags等名字会被忽略
dc=filecmp.dircmp(r'a',r'a',ignore=['common_file'])
print 'left1:',
pprint.pprint(dc.left_list)
print '\nrigjt1:'
pprint.pprint(dc.right_list)
#'common_file'这个会被从文件列表中被删除掉
#2个输入目录共有的文件名会保存在common,各目录独有的文件会在left_only和right_only中
dc=filecmp.dircmp(r'a',r'a')
print 'left2:',
pprint.pprint(dc.left_only)
print '\nrigjt2:'
pprint.pprint(dc.right_only)
#left目录是dircmp()第一个参数,right是第二个参数

#公共成员可以进一步分解为文件,目录和有趣(funny)元素(2个目录中类型不同的内容或者os.stat()指出错误的地方)
dc=filecmp.dircmp(r'a',r'a')
print 'leftx:',
pprint.pprint(dc.common_dirs)
print '\nrigjtx:'
pprint.pprint(dc.common_files)

pprint.pprint(dc.common_funny)
#文件之间的差别可以做类似的划分
dc=filecmp.dircmp(r'a',r'a')
print dc.same_files,dc.diff_files,dc.funny_files
#最后一点,子目录也会保存,从而能窗口地完成递归比较
dc=filecmp.dircmp(r'a',r'a')
print dc.subdirs
#属性subdirs是一个字典,将目录名映射到新的dircmp[对象
#Directories:使用os列出一个目录的内容
#此模块的官方文档:https://docs.python.org/2.7/library/filecmp.html?highlight=filecmp#module-filecmp

python filecmp标准库基础学习的更多相关文章

  1. python linecache标准库基础学习

    #python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...

  2. python calendar标准库基础学习

    # -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#标准库:日期时间基础学习:calendar:处理日期#例1import calen ...

  3. python StringIO标准库基础学习

    #标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...

  4. python glob标准库基础学习

    #glob文件名模式匹配#作用:使用unix shell规则查找与一个模式匹配文件名"""尽管glob api很小,但这个模块很强大,只要程序需要查找文件系统中名字与某种 ...

  5. python 标准库基础学习之开发工具部分1学习

    #2个标准库模块放一起学习,这样减少占用地方和空间#标准库之compileall字节编译源文件import compileall,re,sys#作用是查找到python文件,并把它们编译成字节码表示, ...

  6. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  7. C 标准库基础 IO 操作总结

    其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数.输出参数和返回值,接下来才能开始设计具体的实现过程.C 语言标准库提供的接口功能很有限,不像 Pyth ...

  8. Python的标准库介绍与常用的第三方库

    Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...

  9. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

随机推荐

  1. asp.net 获取系统的根目录

    测试有效的 :  系统的根目录 HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath).ToLo ...

  2. SQL Profile 总结(一)

    一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...

  3. Myself

    每次过来写博客,一定是遇到什么问题,并且自己还解决不来. 并不是单纯的安静下来书写心得体会-->讨厌之余都有点看不起自己. 闲话少说,回归正题. C语言之于我可是骄傲与挫败并存. 当我做程式遇到 ...

  4. Python-elementTree方法解析xml文件-01

    [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据.概念一: <foo> # foo元素的起始标签 ...

  5. SUN-LDAP6.3_RHEL 5.0-卸载LDAP

    卸载LDAP 1.注销服务器 到目录/ldap/ldapinstance/dscc6/bin下 # ./dsccreg remove-server -h 主机名 /ldap/ldapinstance/ ...

  6. 使用SQL语句创建和删除约束

    原文:http://blog.csdn.net/hamber_bao/article/details/6504905 约束的目的就是确保表中的数据的完整性. 常用的约束类型如下: 主键约束:(Prim ...

  7. getParameter百科

    获取数据库中的参数数据 getParameter().   request.getParameter("username");其中的这个username 是接受前台的参数 比如in ...

  8. (转)回车 执行button点击

    功能说明:当我们注册或者执行搜索时,输入内容后,不用单击按钮来执行按钮单击事件,而直接通过回车来执行按钮单击事件.只要在text框中onkeydown事件中加入执行按钮的onclick事件就OK了 代 ...

  9. lnmp架构下php安全配置分享

    目录[-] 1. 使用open_basedir限制虚拟主机跨目录访问 2. 禁用不安全PHP函数 3. 关注软件安全资讯 4. php用户只读 5. 关闭php错误日志 6. php上传分离 7. 关 ...

  10. 第1章 网络编程基础(4)——TCP/IP通信

    TCP协议利用网络层IP协议提供不可靠的通信服务,解决分组的重传和排序问题,为应用程序提供可靠的.端到端的.面向连接的基于字节流的服务. 对等TCP传输实体间的通信具有如下特征: 全双工 只支持两个端 ...