# -*- 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. eclipse format的时候如何让@param后不换行

  2. 为什么HikariCP被号称为性能最好的Java数据库连接池,怎样配置使用

    HiKariCP是数据库连接池的一个后起之秀.号称性能最好.能够完美地PK掉其它连接池. 原文地址:http://blog.csdn.net/clementad/article/details/469 ...

  3. sqlserver 2008 sa登陆的一些问题

    sqlserver 2008 sa登陆 无法连接到(local)? 遇到这个问题请确保SQL主服务是开启状态: ok接下来把服务器名换成 计算机名\实例名  再次使用sa登陆,如下: 是不是可以了呢? ...

  4. ftp nfs samba比较

    首先从字面意思上区分一下:1. FTP(文件传输协议)2. NFS(网络文件系统)3. samba 即smb(服务信息块)协议其中FTP 是TCP/IP协议栈所提供的一种子协议,该子协议具体可以实现在 ...

  5. 如何读懂SQL Server的事务日志

    简介 本文将介绍SQL Server的事务日志中记录了哪一些信息,如何来读懂这些事务日志中信息.首先介绍一个微软没有公开的函数fn_dblog,在文章的接下来的部分主要用到这个函数来读取事务日志. f ...

  6. Cookie[1]

    1.什么是Cookie Cookie是一小段文本类型的数据,由服务器发送,并保留在客户端的计算机上. 2.Cookie的作用 服务器可以利用Cookie包含的信息来筛选并经常维护这些信息,以判断在Ht ...

  7. Collection使用方法

    package cn.stat.p3.conection.demo; import java.util.ArrayList; import java.util.Collection; import j ...

  8. Android 命令

    连接调试 adb connect 127.0.0.1:6555

  9. sublime3配置及插件安装

    1.下载https://github.com/wbond/sublime_package_control中的zip文件,解压后将文件夹名更改为Package Control. 2.将1中的文件夹放入s ...

  10. uva 10963 - The Swallowing Ground

    #include <iostream> #include <cstdio> #include <cstdlib> #include <set> usin ...