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

4
我有一个脚本,可以将文件从一组文件夹复制到另一个具有不同结构的文件夹中。
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

在文件夹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.txt。有什么好的办法吗?我正在用Python编写此代码。

2
那么您基本上想完全忽略子文件夹结构,只是比较文件名?不同目录中会有重复的文件名吗?那该怎么办呢?您看过 os.walk() 的文档吗? - Tim Pietzcker
1个回答

3

Tim是正确的,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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接