当前位置: 首页 > 知识库问答 >
问题:

Python:比较两个不同结构的目录并列出新文件

陶高峻
2023-03-14

我有一个脚本,可以将文件从一个文件夹结构复制到另一个具有不同结构的文件夹。

ex. Folder 1
    c.txt
    d.txt
    subdir1
      a.txt
      b.txt

脚本以这种格式将文件/目录从文件夹1复制到文件夹2(文件夹2具有不同的结构)

Folder 2
   subdir2
     c.txt
     d.txt
   subdir1
     a.txt
     b.txt

html" target="_blank">文件夹2中,我可以创建自己的文件,如new1。txt,new2。txt。创建新文件后,文件夹2的结构如下:

Folder 2
   new1.txt
   new2.txt
   subdir2
     c.txt
     d.txt
   subdir1
     a.txt
     b.txt

现在我需要比较Folder1和Folder2的目录内容。我正在使用filecmp。用于比较目录内容的dircmp。filecmp。这两个文件夹上的dircmp将为我提供subdir2、subdir2/c.txt、subdir2/d.txt作为新目录,以及带有new1的新文件。txt和new2。txt。但实际上我只创建了new1。txt和new2。txt作为新文件,其他文件仅从一个文件夹复制到另一个文件夹。

作为一个新文件,我只需要new1。txt和new2。结果是。你知道我该怎么做吗。我正在用python编写这段代码

共有1个答案

颜杰
2023-03-14

蒂姆是对的,os。walk是解决方案:

>>> path = r'D:\DATA\FP12210\My Documents\Temp\Python'
>>> import os
>>> files1 = []
>>> for root, dirs, files in os.walk(os.path.join(path, 'Folder 1')):
    files1.extend(files)


>>> files1
['c.txt', 'd.txt', 'a.txt', 'b.txt']
>>> files2 = []
>>> for root, dirs, files in os.walk(os.path.join(path, 'Folder 2')):
    files2.extend(files)


>>> files2
['new1.txt', 'new2.txt', 'a.txt', 'b.txt', 'c.txt', 'd.txt']

然后您可以区分您的输出:

>>> print [f for f in files2 if f not in files1]
['new1.txt', 'new2.txt']
 类似资料:
  • 问题内容: 提前致谢。感谢您的帮助。 我想比较两个相同类型和结构的任意JToken(NewtonSoft的Json.Net)。 主要目标 是能够使用此方法对两个Json字符串进行排序,以便即使开始时它们具有相同的数据,但顺序不同,最后它们是两个完全相同的字符串。因此排序标准并不重要,重要的是该标准始终相同。并且应该考虑每个小数据元素。 JToken可以是以下几种类型之一:。我没有考虑比较。 获得一

  • 问题内容: 我需要比较两个CSV文件并在第三个CSV文件中打印出差异。在我的情况下,第一个CSV是一个名为old.csv的哈希表的旧列表,第二个CSV是包含新旧哈希表的新哈希表。 这是我的代码: 第三个文件是旧文件的副本,而不是更新文件。怎么了 ?我希望你能帮助我,非常感谢! PS:我不想使用diff 问题答案: 问题在于您正在将中的每一行与中的同一行进行比较。只要一个文件中有多余的一行,您就会发

  • 问题内容: 假设我有两个表,表A和表B,并且我想比较某个列。 例如, 表A包含以下列:IP,主机,应用 表B具有以下列:IP,数据中心,服务器,模型,最后更新 如何比较两个表之间的IP列以获取差异? 我知道表是否具有相同的列,我可以使用并集和“减号”来获取差异,但是我无法找出表具有不同列的方式。 谢谢! 问题答案: 这将输出两个表中不匹配行的所有列,并且在任一侧都有NULL。

  • 我在Spring有一个项目,我必须读两本。txt文件,一个有许多行,另一个是控制文件,其中包含应从第一个文件读取的行数。我知道我必须使用分区来处理这些文件,因为第一个文件非常大,我需要对其进行分区,并能够在失败时重新启动,但我不知道读者应该如何处理这些文件,因为两个文件的行宽度不同。没有一个文件的行中有标题或分隔符,因此我必须根据主要在第一行中的范围来获取字段<我的一个疑问是,我是否应该在同一个读

  • 我正在使用Kafka和Spark 2.1结构化流。我有两个json格式的数据主题,例如: 我需要比较Spark中基于标记的两个流:name,当值相等时,执行一些额外的定义/函数。 如何使用Spark结构化流来做到这一点? 谢谢