电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python3 filecmp模塊測試比較文件原理解析

瀏覽:77日期:2022-08-01 14:30:59

1.filecmp比較文件

filecmp模塊提供了一些函數(shù)和一個類來比較文件系統(tǒng)上的文件和目錄。

1.1 示例數(shù)據(jù)

使用下面代碼創(chuàng)建一組測試文件。

import osdef mkfile(filename, body=None): with open(filename, ’w’) as f: f.write(body or filename) return def make_example_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/dir_only_in_dir1’) os.mkdir(’dir2/dir_only_in_dir2’) os.mkdir(’dir1/common_dir’) os.mkdir(’dir2/common_dir’) mkfile(’dir1/common_file’, ’this file is the same’) os.link(’dir1/common_file’, ’dir2/common_file’) mkfile(’dir1/contents_differ’) mkfile(’dir2/contents_differ’) # Update the access and modification times so most of the stat # results will match. st = os.stat(’dir1/contents_differ’) os.utime(’dir2/contents_differ’, (st.st_atime, st.st_mtime)) 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()) make_example_dir(’example’) make_example_dir(’example/dir1/common_dir’) make_example_dir(’example/dir2/common_dir’)

運行這個腳本會在axample目錄下生成一個文件樹。

Python3 filecmp模塊測試比較文件原理解析

common_dir目錄下也有同樣的目錄結(jié)構(gòu),以提供有意思的遞歸比較選擇。

1.2 比較文件

cmp()用于比較文件系統(tǒng)上的兩個文件。

import filecmpprint(’common_file :’, end=’ ’)print(filecmp.cmp(’example/dir1/common_file’, ’example/dir2/common_file’, shallow=True), end=’ ’)print(filecmp.cmp(’example/dir1/common_file’, ’example/dir2/common_file’, shallow=False))print(’contents_differ:’, end=’ ’)print(filecmp.cmp(’example/dir1/contents_differ’, ’example/dir2/contents_differ’, shallow=True), end=’ ’)print(filecmp.cmp(’example/dir1/contents_differ’, ’example/dir2/contents_differ’, shallow=False))print(’identical :’, end=’ ’)print(filecmp.cmp(’example/dir1/file_only_in_dir1’, ’example/dir1/file_only_in_dir1’, shallow=True), end=’ ’)print(filecmp.cmp(’example/dir1/file_only_in_dir1’, ’example/dir1/file_only_in_dir1’, shallow=False))

shallo參數(shù)告訴cmp()除了文件的元數(shù)據(jù)外,是否還要查看文件的內(nèi)容。默認情況下,會使用由os.stat()得到的信息來完成一個淺比較。如果結(jié)果是一樣的,則認為文件相同。因此,對于同時創(chuàng)建的相同大小的文件,即使他們的內(nèi)容不同,也會報告為是相同的文件。當shallow為False時,則要比較文件的內(nèi)容。

Python3 filecmp模塊測試比較文件原理解析

如果非遞歸的比較兩個目錄中的一組文件,則可以使用cmpfiles()。參數(shù)是目錄名和兩個位置上要檢查的我就愛你列表。傳入的公共文件列表應當只包含文件名(目錄會導致匹配不成功),而且這些文件在兩個位置上都應當出現(xiàn)。下一個例子顯示了構(gòu)造公共列表的一種簡單方法。與cmp()一樣,這個比較也有一個shallow標志。

import filecmpimport os# Determine the items that exist in both directoriesd1_contents = set(os.listdir(’example/dir1’))d2_contents = set(os.listdir(’example/dir2’))common = list(d1_contents & d2_contents)common_files = [ f for f in common if os.path.isfile(os.path.join(’example/dir1’, f))]print(’Common files:’, common_files)# Compare the directoriesmatch, mismatch, errors = filecmp.cmpfiles( ’example/dir1’, ’example/dir2’, common_files,)print(’Match :’, match)print(’Mismatch :’, mismatch)print(’Errors :’, errors)

cmpfiles()返回3個文件名列表,分別包含匹配的文件、不匹配的文件和不能比較的文件(由于權(quán)限問題或出于其他原因)。

Python3 filecmp模塊測試比較文件原理解析

1.3 比較目錄

前面介紹的函數(shù)適合完成相對簡單的比較。對于大目錄樹的遞歸比較或者更完整的分析,dircmp類很更有用。在最簡單的用例中,report()會打印比較兩個目錄的報告。

import filecmpdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)dc.report()

輸出是一個純文本報告,顯示的結(jié)果只包括給定目錄的內(nèi)容,而不會遞歸比較其子目錄。在這里,認為文件not_the_same是相同的,因為這里沒有比較內(nèi)容。無法讓dircmp像cmp()那樣比較文件的內(nèi)容。

Python3 filecmp模塊測試比較文件原理解析

為了更多的細節(jié),也為了完成一個遞歸比較,可以使用report_full_closure()。

import filecmpdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)dc.report_full_closure()

輸出將包括所有同級子目錄的比較。

Python3 filecmp模塊測試比較文件原理解析

1.4 在程序中使用差異

除了生成打印報告,dircmp還能計算文件列表,可以在程序中直接使用。以下各個屬性只在請求時才計算,所以對于未用的數(shù)據(jù),創(chuàng)建dircmp實例不會帶來開銷。

import filecmpimport pprintdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)print(’Left:’)pprint.pprint(dc.left_list)print(’nRight:’)pprint.pprint(dc.right_list)

所比較目錄中包含的文件和子目錄分別列在left_list和right_list中。

Python3 filecmp模塊測試比較文件原理解析

可以向構(gòu)造函數(shù)傳入一個要忽略的名字列表(該列表中指定的名字將被忽略)來對輸入進行過濾。默認的,RCS、CVS和tags等名字會被忽略。

import filecmpimport pprintdc = filecmp.dircmp(’example/dir1’, ’example/dir2’, ignore=[’common_file’])print(’Left:’)pprint.pprint(dc.left_list)print(’nRight:’)pprint.pprint(dc.right_list)

在這里,將common_file從要比較的文件列表中去除。

Python3 filecmp模塊測試比較文件原理解析

兩個輸入目錄中共有的文件名會保存在common內(nèi),各目錄獨有的文件會列在left_only和right_only中。

import filecmpimport pprintdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)print(’Common:’)pprint.pprint(dc.common)print(’nLeft:’)pprint.pprint(dc.left_only)print(’nRight:’)pprint.pprint(dc.right_only)

'左'目錄是dircmp()的第一個參數(shù),'右'目錄是第二個參數(shù)。

Python3 filecmp模塊測試比較文件原理解析

公共成員可以被進一步分解為文件、目錄和“有趣”元素(兩個目錄中類型不同的內(nèi)容,或者os.stat()指出的有錯誤的地方)。

import filecmpimport pprintdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)print(’Common:’)pprint.pprint(dc.common)print(’nDirectories:’)pprint.pprint(dc.common_dirs)print(’nFiles:’)pprint.pprint(dc.common_files)print(’nFunny:’)pprint.pprint(dc.common_funny)

在示例數(shù)據(jù)中,file_in_dir1元素在一個目錄中是一個文件,而在另一個目錄中是一個子目錄,所以它會出現(xiàn)在“有趣”列表中。

Python3 filecmp模塊測試比較文件原理解析

文件之間的差別也可以做類似的劃分。

import filecmpdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)print(’Same :’, dc.same_files)print(’Different :’, dc.diff_files)print(’Funny :’, dc.funny_files)

文件not_the_same通過os.stat()比較,并且不檢查內(nèi)容,所以它包含在same_files列表中。

Python3 filecmp模塊測試比較文件原理解析

最后一點,子目錄也會被保存,以便容易地完成遞歸比較。

import filecmpdc = filecmp.dircmp(’example/dir1’, ’example/dir2’)print(’Subdirectories:’)print(dc.subdirs)

屬性subdirs是一個字典,它將目錄名映射到新的dircmp對象。

Python3 filecmp模塊測試比較文件原理解析

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 塑料托盘厂家直销-吹塑托盘生产厂家-力库塑业【官网】 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 牛奶检测仪-乳成分分析仪-北京海谊 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 北京成考网-北京成人高考网 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 浙江上沪阀门有限公司 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | CPSE安博会| 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 |