python filecmp标准库基础学习
# -*- 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标准库基础学习的更多相关文章
- python linecache标准库基础学习
#python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...
- python calendar标准库基础学习
# -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#标准库:日期时间基础学习:calendar:处理日期#例1import calen ...
- python StringIO标准库基础学习
#标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...
- python glob标准库基础学习
#glob文件名模式匹配#作用:使用unix shell规则查找与一个模式匹配文件名"""尽管glob api很小,但这个模块很强大,只要程序需要查找文件系统中名字与某种 ...
- python 标准库基础学习之开发工具部分1学习
#2个标准库模块放一起学习,这样减少占用地方和空间#标准库之compileall字节编译源文件import compileall,re,sys#作用是查找到python文件,并把它们编译成字节码表示, ...
- 【python】标准库的大致认识
正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...
- C 标准库基础 IO 操作总结
其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数.输出参数和返回值,接下来才能开始设计具体的实现过程.C 语言标准库提供的接口功能很有限,不像 Pyth ...
- Python的标准库介绍与常用的第三方库
Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...
- python 使用标准库连接linux实现scp和执行命令
import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...
随机推荐
- android 删除的警告对话框
在图形界面之中,对话框也是人机交互的一种重要的形式,程序可以通过对话框对用户进行一些信息的提示,而 用户也可以通过对话框和程序进行一些简单的交互操作. 在Android的开发之中,所有的对话框都是从a ...
- 详解C++ friend关键字
1. 为什么要使用友元? 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为 public( 共用的) ,然而这做带来的问题遍是任何外部函数都可以毫无约束的访 ...
- Python学习--07迭代器、生成器
迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...
- 从客户端检测到有潜在危险的Request.Form值
1.带有html标记内容提交(使用web编辑器): js: <script type="text/javascript"> //简单模式 var editor; Kin ...
- Markdown 入门教程
Markdown 是一种轻量级的标记语言,轻到你甚至可以不叫他语言,因为 Markdown 很容易上手,就是简单地记住几个常用的标签用法就OK了,Markdown 有诸多好处:专注于文字,简单,高效. ...
- Struts2:ValueStack
一.ValueStack 1 .ValueStack是一个接口,在struts2中使用OGNL(Object-Graph Navigation Language)表达式实际上是使用 ...
- [BZOJ]3643 Phi的反函数
我承认开这篇文章只是因为好笑…… 估计Zky神看见3737会很郁闷吧. http://www.lydsy.com/JudgeOnline/problem.php?id=3643 本来想直接交3737改 ...
- uva 105 - The Skyline Problem
一.用数组储存该位置的最高点即可(图形的连续点离散化),注意左边界及右边界的情况: 注意:无论建筑物最左边是盖到哪里,你都得从1开始输出(输入输出都是integer,所以才能离散化): #includ ...
- 编写自己的javascript功能库之Ajax(仿jquery方式)
本人学习的是php,所以就用php跟js来演示代码了,主要是锻炼自己写js的能力,练练手而已. 下面这是我编写的操作ajax的代码功能,勉强让我称之为库吧.. js代码实例(tool.ajax.js) ...
- C 语言 联合union初见
1.什么是联合? “联合”是一种构造类型的数据结构.在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已 ...