首页 > 编程语言 >使用Python递归比较两个文件夹下所有文件内容不同的文件

使用Python递归比较两个文件夹下所有文件内容不同的文件

时间:2024-09-12 10:51:12浏览次数:1  
标签:files 文件 daoban Python 文件夹 file path diff dir

比较两份源代码文件异同

  • 使用Python递归比较两个文件夹下所有同名文件内容中存在不同的文件。
  • 这么做的应用场景是做代码审计的时候,通过比对两份相同项目的源代码,一份是破解的版本一份是正版的版本,比对破解的版本更改了哪些代码,从而挖掘后门代码。

具体代码如下:


import os
import filecmp
import difflib

# 定义目录路径
base_dir = "/home/viadmin/finddiffiles"
wordfencedaoban_dir = os.path.join(base_dir, "wordfencedaoban")
wordfencezhengban_dir = os.path.join(base_dir, "wordfencezhengban")

# 获取两个文件夹中的所有文件(排除图片文件)
def get_files(directory):
    files = []
    for root, _, filenames in os.walk(directory):
        for filename in filenames:
            if not filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
                files.append(os.path.join(root, filename))
    return files

# 获取文件列表
daoban_files = get_files(wordfencedaoban_dir)
zhengban_files = get_files(wordfencezhengban_dir)

# 打印获取的文件名称
print("Files in wordfencedaoban:")
for file in daoban_files:
    print(file)

print("\nFiles in wordfencezhengban:")
for file in zhengban_files:
    print(file)

# 比较文件内容
def compare_files(file1, file2):
    with open(file1, 'r') as f1, open(file2, 'r') as f2:
        lines1 = f1.readlines()
        lines2 = f2.readlines()
    
    diff = difflib.unified_diff(lines1, lines2, fromfile=file1, tofile=file2)
    return ''.join(diff)

# 记录差异文件
diff_files = []
for daoban_file in daoban_files:
    relative_path = os.path.relpath(daoban_file, wordfencedaoban_dir)
    zhengban_file = os.path.join(wordfencezhengban_dir, relative_path)
    
    if not os.path.exists(zhengban_file):
        diff_files.append((daoban_file, "Not found in zhengban"))
    elif not filecmp.cmp(daoban_file, zhengban_file, shallow=False):
        diff_content = compare_files(daoban_file, zhengban_file)
        diff_files.append((daoban_file, zhengban_file, diff_content))

# 输出结果到屏幕
for diff in diff_files:
    print(f"Difference found: {diff[0]} vs {diff[1]}")
    if len(diff) > 2:
        print(diff[2])
    print("-" * 80)

# 输出结果到文本文件
output_file = os.path.join(base_dir, "diff_results.txt")
with open(output_file, 'w') as f:
    for diff in diff_files:
        f.write(f"Difference found: {diff[0]} vs {diff[1]}\n")
        if len(diff) > 2:
            f.write(diff[2])
        f.write("-" * 80 + "\n")

print(f"Comparison completed. Results saved to {output_file}")

执行结果和方式

  • 执行过程就是将上述代码保存到类似compare.py文件,然后使用python3版本执行
  • 只要必要的库都安装了,执行是没有什么问题,这里为了测试,将遍历的文件名称打印出来了,可以根据实际情况注释掉!

标签:files,文件,daoban,Python,文件夹,file,path,diff,dir
From: https://www.cnblogs.com/autopwn/p/18409759

相关文章

  • Apache+PHP设置支持大文件上传
    一、Apache配置文件(httpd.conf)更改FastCGI进程能够处理的HTTP请求的最大长度限制,单位为字节(Bytes) FcgidMaxRequestLen524288000 二、PHP配置文件(php.ini) #是否允许通过HTTP上传文件的开关。默认为ON即是开【一般不做修改】file_uploads=On#上传服务器时存储......
  • HEXDUMP.EXE 是一个常用的工具,用于查看和显示二进制文件的内容,以十六进制格式呈现。它
    HEXDUMP.EXE是一种早期的计算机程序,用于显示文件的十六进制表示。其起源可以追溯到早期的计算机系统,特别是在UNIX操作系统中。最早的hexdump工具出现在UNIX系统中,它允许用户以十六进制和ASCII格式查看文件内容。这个工具在许多操作系统和编程环境中都得到了实现和扩展,以......
  • Python中如何将图片资源打包进exe文件
    目录一、安装PyInstaller二、准备图片资源三、修改图片资源的引用方式1.使用Base64编码2.修改资源路径的引用1.打包命令2.打包后的文件3.运行exe文件五、案例与测试六、总结在Python开发中,经常需要将图片等资源文件与Python脚本一起打包成独立的可执行文件(ex......
  • Python编译器IDE爬虫爬取3首歌曲代码
    importrequestssong_urls=[“http://music.163.com/song/media/outer/url?id=25795016.mp3”,“http://music.163.com/song/media/outer/url?id=5255631.mp3”,“http://music.163.com/song/media/outer/url?id=5255640.mp3”]forindex,song_urlinenumerate(so......
  • 手机安卓版Python编译器IDE彩色音乐播放器代码
    importpygameimporttkinterastkfromtkinterimportfiledialog初始化pygamepygame.mixer.init()current_song_index=0defplay_music():selected_indices=song_list.curselection()ifselected_indices:globalcurrent_song_indexcurrent_song_index=......
  • 怎样的跨网文件安全交换系统,能让企业投入产出比最高?
    网络安全技术越来越成为企业进行数据保护的手段,企业有数据安全的意识,且进行网络安全防护建设,是企业信息化建设和安全意识增强的表现。但对于很多小而精的企业来说,进行网络隔离建设成本可控,但随之也会带来一系列其他的成本。如网络隔离后,需要考虑跨网文件安全交换系统的建设。......
  • Ftrans跨域文件传输方案,数据流动无阻的高效路径
    大型集团企业由于其规模庞大、业务广泛且往往将分支机构、办事处分布在多个地域,因此会涉及到跨域文件传输的需求。主要源于以下几个方面:1.业务协同:集团内部的不同部门或子公司可能位于不同的地理位置,但需要进行紧密的业务协同。文件传输是实现这种协同的重要方式之一,包括项目......
  • 锋哥写一套前后端分离Python权限系统 基于Django5+DRF+Vue3.2+Element Plus+Jwt 视频
    大家好,我是java1234_小锋老师,最近写了一套【前后端分离Python权限系统基于Django5+DRF+Vue3.2+ElementPlus+Jwt】视频教程,持续更新中,计划月底更新完,感谢支持。视频在线地址:打造前后端分离Python权限系统基于Django5+DRF+Vue3.2+ElementPlus+Jwt视频教程(火爆连载更新中......
  • Python习题 177:设计银行账户类并实现存取款功能
    (编码题)Python实现一个简单的银行账户类BankAccount,包含初始化方法、存款、取款、获取余额等功能。参考答案分析需求如下。Python类BankAccount,用于模拟银行账户的基本功能。该类应包含以下方法:初始化方法:接受两个参数:account_holder(账户持有人的姓名)和balance(账户......
  • 计算机毕业设计必看必学!! 89352 基于python的网上挂号预约系统,原创定制程序, java、P
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,医院当然也不例外。网上挂号预约系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Python技术构建的一个管理系统。整个开发过程首先对软件系统进......