Python工具-文件夹对比

文件夹对比,意思是说对比两个文件夹,看他们里面哪些文件是共有的,哪些是单独所有的。

比如说这里对比d:/a文件夹和d:/b文件夹。最终输出共有的文件【对于共有的文件输出各自的最后修改时间】和单独拥有的文件。

代码如下:

#-*-coding:utf-8-*-  

#===============================================================================
# 目录对比工具,列出
# 1、A比B多了哪些文件
# 2、B比A多了哪些文件
# 3、二者相同的文件,如果最后修改日期不同,则要标注
# 4、包含子目录
#===============================================================================

import os, time

AFILES = []
BFILES = []
COMMON = []
def getPrettyTime(state):
    return time.strftime('%y-%m-%d %H:%M:%S', time.localtime(state.st_mtime))
def dirCompare(apath, bpath):
    afiles = []
    bfiles = []
    for root, dirs , files in os.walk(apath):
        for f in files :
            afiles.append(root + "\\" + f)
    for root, dirs , files in os.walk(bpath):
        for f in files :
            bfiles.append(root + "\\" + f)
    #===========================================================================
    # 去掉afiles中文件名的apath
    #===========================================================================
    apathlen = len(apath)
    aafiles = []
    for f in afiles:
        aafiles.append(f[apathlen:])
    #===========================================================================
    # 去掉afiles中文件名的apath
    #===========================================================================
    bpathlen = len(bpath)
    bbfiles = []
    for f in bfiles:
        bbfiles.append(f[bpathlen:]) 
    afiles = aafiles
    bfiles = bbfiles
    setA = set(afiles)
    setB = set(bfiles)
    #===========================================================================
    # 处理共有文件
    #===========================================================================
    commonfiles = setA & setB
    print "#================================="
    print "common in '", apath, "' and '", bpath, "'"
    print "#================================="
    print '\t\t\ta:\t\t\t\t\t\tb:'
    for f in sorted(commonfiles):
        print f + "\t\t" + getPrettyTime(os.stat(apath + "\\" + f)) + "\t\t" + getPrettyTime(os.stat(bpath + "\\" + f))
        
    #===========================================================================
    # 处理仅出现在一个目录中的文件
    #===========================================================================
    onlyFiles = setA ^ setB
    aonlyFiles = []
    bonlyFiles = []
    for of in onlyFiles:
        if of in afiles:
            aonlyFiles.append(of)
        elif of in bfiles:
            bonlyFiles.append(of)
    print "#================================="
    print "#only in ", apath
    print "#================================="
    for of in sorted(aonlyFiles):
        print of
    print "#================================="
    print "#only in ", bpath
    print "#================================="
    for of in sorted(bonlyFiles):
        print of
if __name__ == '__main__':
    dirCompare('d:/a', 'd:/b')

运行结果如下:


其实实现起来还蛮简单的,因为python自身太强大。主要是用了python的set的功能。

a = t | s            # t 和 s的并集 

b = t & s          # t 和 s的交集 

c = t – s          # 求差集(项在t中,但不在s中) 

d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)

----------------------------

在python中实际上本来就有这样的工具。filecmp模块就是做这个工作的。

filecmp模块有cmp(file1,file2)、cmpfiles(dir1,dir2)、dircmp(dir1,dir2)等几个函数可以使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当然可以!您可以使用Python的os模块和glob模块来查找和处理文件。 以下是一个示例程序,可以根据文件名查找文件,并在控制台中显示文件的路径: ```python import os import glob # 指定查找的目录 directory = "/path/to/directory" # 指定要查找的文件名模式 file_pattern = "*.txt" # 使用glob模块查找匹配的文件路径 file_paths = glob.glob(os.path.join(directory, file_pattern)) # 输出所有匹配的文件路径 for path in file_paths: print(path) ``` 在上面的示例中,您需要将`/path/to/directory`替换为要查找文件的目录的路径,将`*.txt`替换为您要查找的文件名模式。 这个示例程序使用了`glob.glob()`函数来查找匹配的文件路径,并将它们存储在`file_paths`列表中。然后,它遍历该列表并打印每个匹配文件的路径。 希望这个示例程序能帮助您解决问题! ### 回答2: 使用Python编写一个根据文件名查找文件地址的工具可以通过以下步骤来完成: 1. 导入os模块,用于获取文件目录和操作系统相关的功能。 2. 获取用户输入的文件名。 3. 使用os模块的walk函数遍历目录,查找匹配文件名的文件。 4. 如果找到了匹配的文件,输出文件地址;如果没有找到,输出提示信息。 5. 编写一个函数,将步骤3和4封装起来。 下面是一个示例代码: ```python import os def search_file(file_name): for root, dirs, files in os.walk('/'): # 修改为需要查找的目录 for file in files: if file == file_name: print(os.path.join(root, file)) return print("没有找到匹配的文件!") if __name__ == '__main__': file_name = input("请输入要查找的文件名:") search_file(file_name) ``` 在该示例中,我们通过调用`os.walk('/')`遍历根目录,你可以根据具体需求修改为需要查找的目录。然后,我们通过与用户输入的文件名进行对比来查找匹配的文件。如果找到了匹配的文件,我们使用`os.path.join(root, file)`函数来获取文件的绝对路径,并将其打印出来。如果没有找到匹配的文件,我们将输出提示信息"没有找到匹配的文件!"。 你可以根据实际情况修改代码,并按照自己的需求进行文件查找。例如,可以添加更多的过滤条件,如文件类型、文件大小等。 ### 回答3: 使用Python编写一个根据文件名查找文件地址的工具是相对简单的。下面是一个简单的示例代码: ```python import os def find_file(file_name, directory): for root, dirs, files in os.walk(directory): if file_name in files: return os.path.join(root, file_name) return "文件未找到" file_name = input("请输入文件名:") file_path = find_file(file_name, "你的目标文件夹路径") print(file_path) ``` 这段代码首先导入了`os`模块,它提供了操作文件和目录的函数。`find_file`函数接受两个参数,分别是要查找的文件名和目标文件夹的路径。通过使用`os.walk`函数遍历目标文件夹下的所有文件和子文件夹。在每一个文件夹中,如果找到了指定文件名,就返回该文件的完整路径。若遍历完文件夹仍未找到该文件,则返回一个提示信息"文件未找到"。 最后,通过调用`input`函数等待用户输入文件名,并将其传递给`find_file`函数进行查找。最终输出找到的文件路径或提示信息。请注意替换代码中"你的目标文件夹路径"为你实际的目标文件夹路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值