本文介绍基于Python语言,以一个大文件夹作为标准,对另一个大文件夹所包含的子文件夹文件加以查漏补缺,并将查漏补缺的结果输出的方法。

  首先,来明确一下本文所需实现的具体需求。现有一个大文件夹,其中包含了大量子文件夹,如下图所示。

  此外,我们还有另一个大文件夹,其中同样包含了大量的子文件夹,如下图所示;从上图与下图中的紫色框可以看出,这是两个不一样的大文件夹。但同时,我们还知道这两个大文件夹中的子文件夹数量,以及每一个子文件夹的名称,几乎是完全一致的——但是下图所示的大文件夹较之上图,缺少了一些子文件夹

  我们现在希望实现的是,以第一幅图所示的大文件夹为标准,对第二幅图所示的大文件夹中的子文件夹加以查漏补缺,找出第二个大文件夹中缺少的子文件夹的名称,以及缺少的子文件夹的数量。

  了解了具体需求,我们就可以开始代码的撰写。这里需要注意,本文比较的是两个大文件夹子文件夹的差异;如果大家希望比较两个大文件夹文件的差异,整体思路也都是一样的,也可以用本文提供的代码。

  本文所用到的具体代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Tue Feb 21 17:12:47 2023 @author: fkxxgis
""" import os template_folder = r"E:\02_Project\01_Chlorophyll\Fishnet\ResultFolder"
new_folder = r"E:\02_Project\01_Chlorophyll\Fishnet\ResultFolder_AI" folder_list = os.listdir(template_folder)
new_list = os.listdir(new_folder) num = 0
for folder in folder_list:
if folder not in new_list:
num += 1
print(folder, "is not in new folder!")
print("\n", num, " folder(S) is(are) not in new folder!", sep = "")

  可以看到,代码整体也是非常简单的。首先,template_folder是我们作为标准的大文件夹,也就是本文开头第一幅图所示的文件夹;而new_folder则是需要对其中子文件夹加以查漏补缺的大文件夹,也就是本文开头第二幅图所示的文件夹

  首先,介绍一下代码的整体思路。

  首先,我们基于os.listdir()函数,遍历标准大文件夹中的每一个子文件夹,获取每一个子文件夹的名称,并将其存放在一个列表中;接下来,我们通过同样的方式,获取待查漏补缺的大文件夹中的子文件夹名称,同样存放在一个列表中。接下来,我们即可开始对比两个大文件夹子文件夹的数量差异。首先,设置一个变量num,作为子文件夹数量差异的计算变量;随后,通过一个for循环,依次取出标准大文件夹子文件夹的名称,并在待查漏补缺的大文件夹对应的子文件夹名称列表中加以搜索;如果找不到当前名称的子文件夹,说明在第二个大文件夹中就少了这一子文件夹,因此需要将其名称输出,并在变量num中增加1。完成上述循环后,我们即可获得第二个大文件夹,也就是待查漏补缺的大文件夹中,所缺少的子文件夹的名称以及其数量。

  其次,代码详细的逐句介绍如下。

  第一部分,我们需要导入所需的Python内置模块os,其用于与操作系统进行交互,在本文中就是进行读取文件列表等操作。

  随后,我们指定了一个文件夹路径,存储在变量template_folder中;该文件夹是我们作为标准的大文件夹,即本文开头第一幅图所示的文件夹。接下来,我们继续指定另一个文件夹路径,存储在变量new_folder中。该文件夹就是需要对其中子文件夹加以查漏补缺的大文件夹,也就是本文开头第二幅图所示的文件夹

  随后,使用os.listdir()函数获取作为标准的大文件夹中,所有的文件和文件夹的列表,并将其存储在变量folder_list中;同样的方法,使用os.listdir()函数获取另一个文件夹中的所有文件和文件夹的列表,并将其存储在变量new_list中。

  接下来,我们初始化一个变量num,用于计数在模板文件夹中存在,但在新文件夹中不存在的文件夹的数量。随后,即可开始循环,遍历模板文件夹中的每个文件夹,并使用条件判断语句检查这个文件夹是否存在于新文件夹中——如果文件夹不在新文件夹中,则执行以下操作:第一步,将变量num的值增加1,用于计数不存在于新文件夹中的文件夹的数量;第二步,打印当前文件夹的名称,以及附加的文本信息。

  最后,我们打印最终的结果,显示不存在于新文件夹中的文件夹的数量。

  运行上述代码,将会得到如下所示的结果。

  代码非常简单,到这里就结束了;如果大家还有其他需求,可以自行再扩充代码。例如,如果希望将待查漏补缺的大文件夹中缺少的子文件夹复制过来,则可以参考文章Python结合文件名称将多个文件复制到不同路径下中所提到的代码思路加以实现。

  至此,大功告成。

核对不同文件夹所含内容的差异并提取缺失内容:Python代码的更多相关文章

  1. Windows下对文件夹下所有图片批量重命名(附C++,python,matlab代码)

    https://blog.csdn.net/u011574296/article/details/72956446: Windows下对文件夹下所有图片批量重命名(附C++,python,matlab ...

  2. python批量修改一个文件夹下含多个文件夹中的所有图片名称

    网上能找到的,大多是只对一个文件夹下所有图片进行重命名的代码. 这边实现的是,一个文件夹下有多个文件夹内图片的重命名. rename.py #!/usr/bin/python # -*- coding ...

  3. [转载] 与WIN不同,linux替换文件夹会删除原文件夹下的全部内容!

    今天差点把源码给覆盖掉了><...555... 虚惊一场!!看了一篇博客分析这种情况.我的环境是CentOS5.5,不会出现文件夹直接被覆盖的情况,但是在Linux下不要用Win下的一些直 ...

  4. hdfs中删除文件、文件夹、抓取内容

    删除文件   bin/hdfs dfs -rm output2/* 删除文件夹   bin/hdfs dfs -rm -r output2 抓取内容     bin/hdfs dfs -cat /us ...

  5. bat 批处理切换到当前脚本所在文件夹

    bat 批处理切换到当前脚本所在文件夹   切换到当前脚本所在的文件夹 ? 1 cd  %~dp0 另外附上一些bat基本内容 —————————————————————————————— 批处理常用 ...

  6. Windows Store App JavaScript 开发:获取文件和文件夹列表

    在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...

  7. 文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance/GoodSync/Allway Sync/Compare Advance)

    关于文件同步的文章,已经很多次出现在异次元上了,因为它们很多都能实实在在提高工作便利性.比方说有我们熟悉的云端同步软件 Dropbox.金山快盘,以及曾经还介绍过可本地使用的 Allway Sync  ...

  8. 365DirMon(文件夹监视专家) v2.8绿色免费版

    软件名称:365DirMon(文件夹监视专家)软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 1.6M 图片预览: 软件简介:365DirMon 是一可以监控磁盘 ...

  9. Linux下 两台机器文件/文件夹 相互拷贝

    Linux下 两台机器文件/文件夹 相互拷贝 设有两台机器 :A:*.101及 B:*.102. 把A下的.temp/var/a.txt拷贝到B机器的/text/目录下: 进入B机器:scp root ...

  10. 修改windows user 文件夹中的用户名

    假设我们需要将帐户A改名为B.首先我们需要用另一个管理员帐户C登陆系统. 1.在控制面板-〉用户帐户中将帐户A改名为B. 2.打开C:/Users或"用户"文件夹,将文件夹A重命名 ...

随机推荐

  1. Github Copilot绑定Jetbrains IDE无效的解决方案

    在Github中进行教育认证后不会自动开通Copilot功能,因此,在进行了Github教育认证之后,在使用之前要进入Github Copilot官网开通Coplilot,如果忽略了这一点,绑定Jet ...

  2. cesium教程9-加载倾斜摄影并解决高度问题

    无人机航拍的倾斜摄影,用照片和视频处理生成三维模型,一般照片都带有坐标信息,所以一般都能定位的比较准确,但是经常会出现高度偏差,这个时候就需要特殊处理了. 今天航拍建模的效果如下: 这个建模没有裁剪, ...

  3. C# 如何获取本机IP

    百度搜索的方案 如果你去百度C#如何获取本机IP,那么大概率的你会得到以下的几段代码,第一种就是这样: string name = Dns.GetHostName(); IPAddress[] ipa ...

  4. 『手撕Vue-CLI』拉取版本号

    开篇 在上一篇文章中,给 nue-cli 添加了与用户终端交互的功能,这一次来实现一个拉取版本号的功能. 这个功能的背景是,有时候我们在使用脚手架的时候,不同版本的脚手架可能会有不同的功能,所以用户有 ...

  5. 安装图形化界面时候报错 Transaction check error: file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch

    报错 Transaction check error:file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x8 ...

  6. 状态管理(redux)

    https://www.redux.org.cn/ 2013年 Facebook 提出了 Flux 架构的思想,引发了很多的实现.2015年,Redux 出现,将 Flux 与函数式编程结合一起,很短 ...

  7. git创建分支 解决git网速太慢

                所谓的分支,就是每个人负责的不同的模块             整个项目有一个主干 master             所有的分支都是 从主干 maser 上 分支而来的   ...

  8. Cursor是什么?基于ChatGPT代码编辑器的cursor如何使用?VS Code如何迁移到Cursor的步骤

    Cursor是什么 Cursor 是一个基于 Visual Studio Code(VS Code)技术构建的高级代码编辑器,专为提高编程效率并更深度地整合 AI 功能而设计.它不仅继承了 VS Co ...

  9. java线程的park unpark方法

    标签(空格分隔): 多线程 park 和 unpark的使用 park和unpark并不是线程的方法,而是LockSupport的静态方法 暂停当前线程 LockSupport.park();//所在 ...

  10. MyBatis 的在使用上的注意事项及其辨析

    1. MyBatis 的在使用上的注意事项及其辨析 @ 目录 1. MyBatis 的在使用上的注意事项及其辨析 2. 准备工作 3. #{ } 与 ${ } 的区别和使用 {} 3.1 什么情况下必 ...