问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python 2个文件比对

发布网友 发布时间:2022-04-18 21:19

我来回答

2个回答

懂视网 时间:2022-04-19 01:40

filecmp定义了两个函数,用于方便地比较文件与文件夹:

filecmp.cmp(f1, f2[, shallow]):

比较两个文件的内容是否匹配。参数f1, f2指定要比较的文件的路径。可选参数shallow指定比较文件时是否需要考虑文件本身的属性(通过os.stat函数可以获得文件属性)。如果文件内容匹配,函数返回True,否则返回False。

filecmp.cmpfiles(dir1, dir2, common[, shallow]):

比较两个文件夹内指定文件是否相等。参数dir1, dir2指定要比较的文件夹,参数common指定要比较的文件名列表。函数返回包含3个list元素的元组,分别表示匹配、不匹配以及错误的文件列表。错误的文件指的是不存在的文件,或文件被琐定不可读,或没权限读文件,或者由于其他原因访问不了该文件。

filecmp模块中定义了一个dircmp类,用于比较文件夹,通过该类比较两个文件夹,可以获取一些详细的比较结果(如只在A文件夹存在的文件列表),并支持子文件夹的递归比较。

dircmp提供了三个方法用于报告比较的结果:

•report():只比较指定文件夹中的内容(文件与文件夹)
•report_partial_closure():比较文件夹及第一级子文件夹的内容
•report_full_closure():递归比较所有的文件夹的内容
dircmp还提供了下面这些属性用于获取比较的详细结果:

•left_list:左边文件夹中的文件与文件夹列表;
•right_list:右边文件夹中的文件与文件夹列表;
•common:两边文件夹中都存在的文件或文件夹;
•left_only:只在左边文件夹中存在的文件或文件夹;
•right_only:只在右边文件夹中存在的文件或文件夹;
•common_dirs:两边文件夹都存在的子文件夹;
•common_files:两边文件夹都存在的子文件;
•common_funny:两边文件夹都存在的子文件夹;
•same_files:匹配的文件;
•diff_files:不匹配的文件;
•funny_files:两边文件夹中都存在,但无法比较的文件;
•subdirs:我没看明白这个属性的意思,python手册中的解释如下:A dictionary mapping names in common_dirs to dircmp objects

简单就是美!我只要文件比较的结果,不想去关心文件是如何是比较的,hey,就用python吧~~

热心网友 时间:2022-04-18 22:48

先把文件能正常解析成结构化数据再说,我建议用正则表达式。把每个结构匹配出来,然后做后继工作。追问文件b就是正则表达的结果,文件a是函数匹配的结果!其实上述的问题用excel函数可以很轻松解决!但是我希望通过Python脚本时间!

追答写了代码

aMap={} #map to quick find match
fs=[] #collect field
data=open("a.txt","r").read()
dlen=len(data)
idx=0
cnt=3
i=data.find("create",idx,dlen)
while i!=-1:
f=data[idx:i+6]
fs.append(f.strip())
if len(fs)==3:
aMap[fs[0]]=[fs[1],fs[2]]
fs=[]
idx=i+7
i=data.find("create",idx,dlen)

blines=open("b.txt","r").readlines()
blen=len(blines)
cur=blen-1 #cur line is the current line to process cur will from blen-1 to 0

while cur>=0: #from bottom to top
line=blines[cur]
if line.startswith("sap lag"):
if aMap.has_key(line.strip()): #if we has the field in a file
b,c=aMap[line.strip()] #
blines.insert(cur+1,"\t"+b+"\n")
blines.insert(cur+2,"\t"+c+"\n")
cur-=1

print blines
open("c.txt","w").writelines(blines)

生成的文件如下,注意第二行第三行:
sap lag-1:512.1732 create
subscriber-interface "ZX-112.12.3.81/28" create 《----
group-interface "zx3-lag-5" create 《-----
下面同原文件

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 微信情话小程序付款是真的吗? 苹果没有打开手机壳如何分辨电池是否原版的 vb6精减版怎样进行串口操作 写一个演讲稿 怎样写好一个演讲稿? 关于VB6.0精简版 vb6绿色简化版哪里有下载 vb6.0精简版免费下载地址。没有多余插件的地址。满意的话追加分数。 VB6.0软件有多大 怎样下载vb6.0啊,急求,能不能给我传一份。 谁能给个Visual Basic 6.0 精简版下载地址要无毒的刚下个有毒气死了 win7系统可以安装vb6吗?? 怎样下载vb6.0精简版,而不用下载一些无用的软件 国台酒业的酒怎么样? 贵州茅台镇金士酒业的酱香型10年陈酿中投证券特供的多少钱一瓶啊 贵州仁怀茅台镇金士酒业有限公司出的国台酒53度在天津卖多少钱? 金士力白酒 贵州怀柔茅台镇金士酒业出品的金士力国台酒 500ml 52度 浓香型白酒 市场价多少钱? 谢谢 400元一瓶国台国标2015贵吗 私密异味瘙痒怎么弄啊 python tkinter 按钮位置设置问题。做了一个GUI,但是按钮的布局有些问题... 苹果手机电池怎么分辨是不是原装? 怎么查询iphone电池是否原装 八年级上册数学一次函数y=kx+b图像怎么画? 一次函数五种表达方式 一次函数几种表示方式如何相互转换 一次函数有几种形式 一次函数又分别分为哪几种函数? 一次函数基本解析式是什么 一次函数的基本意义 袁大头有二年的吗? 1。什么是函数?函数的表示方法有哪些? 2.什么是正比例函数、一次函数?它们的一般形式是怎样的?、 期货玻璃fg1512是什么玻璃品种 玻璃期货,为什么前一个图形是一字板,我记得今天白天有交易啊! 袁大头有二年的吗?什么价格? 袁大头银元民国二年最新价格 民国二年袁大头银元图片及价格 中华民国二年袁世凯银元有真的吗? 袁世凯银元有二十七年的吗? imac不开机? imac的电源键不灵敏