介绍
这篇文章将为大家详细讲解有关python如何对比两个目录的文件是否相同,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
有时候我们要对比两份配置文件是不是一样,或者比较两个文本是否异样,可以使用linux命令行工具diff a_file b_file,但是输出的结果读起来不是很友好。这时候使用python的标准库difflib就能满足我们的需求。
下面这个脚本使用了difflib和argparse, argparse用于解析我们给此脚本传入的两个参数(即两份待比较的文件),由difflib执行比较,比较的结果放到了一个html里面,只要找个浏览器打开此html文件,就能直观地看到比较结果,两份文件有差异的地方会高亮显示出来。
以python2.7为例,compare_two_files。py程序正文:
# !/bin/env python #,- *安康;编码:utf-8 - * - import difflib import 系统 import argparse #,读取建表语句或配置文件 def read_file (file_name): ,,,试一试: ,,,,,,,file_desc =,开放(file_name, & # 39; " # 39;) ,,,,,,,#,读取后按行分割 ,,,,,,,text =, file_desc.read () .splitlines () ,,,,,,,file_desc.close () ,,,,,,,return 文本 ,,,except IOError as 错误: ,,,,,,,print & # 39; Read input file 错误:,{0}& # 39;.format(错误) ,,,,,,,sys.exit () #,比较两个文件并把结果生成一份html文本 def compare_file (,, file1 file2): ,,,if file1 ==,““,或是file2 ==,““: ,,,,,,,print & # 39;文件路径不能为空:第一个文件的路径:{0},,第二个文件的路径:{1},强生的# 39;.format (,, file1 file2) ,,,,,,,sys.exit () ,,,: ,,,,,,,print “正在比较文件{0},和,{1}“.format (,, file1 file2) ,,,text1_lines =, read_file (file1) ,,,text2_lines =, read_file (file2) ,,,diff =, difflib.HtmlDiff(),,,, #,创建HtmlDiff 对象 ,,,result =, diff.make_file (text1_lines, text2_lines),, #,通过make_file 方法输出,html 格式的对比结果 ,,,#,将结果写入到result_comparation.html文件中 ,,,试一试: ,,,,,,,with 开放(& # 39;result_comparation.html& # 39;,, & # 39; w # 39;), as result_file: ,,,,,,,,,,,result_file.write(结果) ,,,,,,,,,,,print “0==}==========祝辞,Successfully 完成\ n" ,,,except IOError as 错误: ,,,,,,,print & # 39;写入html文件错误:{0}& # 39;.format(错误) if __name__ ==,“__main__": ,,,#,用define two arguments should be passed ,,以及用法:-f1 fname1 -f2 fname2 ,,,my_parser =, argparse.ArgumentParser(描述=按肓礁鑫募问? ,,,my_parser.add_argument (& # 39; -f1& # 39;,, action=& # 39;商店# 39;,,dest=& # 39; fname1& # 39;,,需要=True) ,,,my_parser.add_argument (& # 39; - f2 # 39;,, action=& # 39;商店# 39;,,dest=& # 39; fname2& # 39;,,需要=True) ,,,#,retrieve all input 参数 ,,,given_args =, my_parser.parse_args () ,,,file1 =given_args.fname1 ,,,file2 =given_args.fname2 ,,,compare_file (,, file1 file2)
<强>【待比较的文件】强>
两份文件分别是old_ddl_file和new_ddl_file,内容分别是:
old_ddl_file文件内容
CREATE EXTERNAL TABLE raw_tags ( p0 string  COMMENT “uid”, p3 string  COMMENT ,“tag 名字,,如只新闻,游戏,,博览会,,shoopingURL”, p4 string  COMMENT “如只0,,游戏”, p11 int  COMMENT “性别”, dt string  COMMENT ,“日期,like 26/6/2017”, action string  COMMENT “clickmodule, click_taghead_link,, clicklink”) CLUSTERED BY ( dt) INTO 4桶 ROW FORMAT 分隔 FIELDS TERMINATED  BY ”、“ STORED AS  INPUTFORMAT “org.apache.hadoop.mapred.TextInputFormat” OUTPUTFORMAT “org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat” 位置 hdfs://hdfs-ha/应用程序/蜂巢/仓库/ksai.db/raw_tags ' TBLPROPERTIES ( “numFiles '=' 1 ', “numRows '=' 0 ', “rawDataSize '=' 0 ', ' totalSize '=' 70575510 ', ' transient_lastDdlTime '=' 1500469448 ')
new_ddl_file文件内容
CREATE EXTERNAL TABLE raw_tags ( p0 string  COMMENT “uid”, null null null null null null null null null null null null null null null null null null null nullpython如何对比两个目录的文件是否相同