【问题标题】:Replacing files in one folder and all its subdirectories with modified versions in another folder将一个文件夹及其所有子目录中的文件替换为另一个文件夹中的修改版本
【发布时间】:2013-04-17 12:40:44
【问题描述】:

我有两个文件夹,一个叫做“修改”,一个叫做“原始”。

  • 'modified' 没有子目录,包含 4000 个 wav 文件,每个文件都有唯一的名称。
  • 这 4000 个文件是“原始”文件的副本,但该文件夹有许多子目录,其中包含原始 wav 文件。

我想,对于“修改”中的所有 wav 文件,无论它们在哪里,都替换它们在“原始”中的名称对应文件。

例如,如果一个文件在修改后被称为“sound1.wav”,那么我想在“original”的某个子目录中找到“sound1.wav”,并将那里的原始文件替换为修改后的版本。

我运行 Windows 8,因此最好使用命令提示符或 cygwin。

【问题讨论】:

  • Python 成功了!如果有人想知道解决方案,请告诉我。
  • 您应该将其发布为答案...
  • 大功告成,如下:)

标签: cygwin directory dos subdirectory


【解决方案1】:

根据要求,我编写了执行上述操作的 python 代码。我使用“os”和“shutil”模块首先导航目录,然后覆盖文件。

'C:/../modified' 是指包含我们已修改并希望用于覆盖原始文件的文件的目录。

'C:/../originals' 是指包含许多子目录的目录,其中的文件与'modified'中的名称相同。

代码通过列出修改后的目录中的每个文件来工作,并且对于每个文件,我们声明文件的路径。然后,我们查看原始目录的所有子目录,在修改后的文件和原始文件同名的地方,我们使用shutil.copyfile() 将原始文件替换为修改后的文件。

因为我们使用的是 Windows,所以有必要将斜线的方向更改为“/”。

这是对修改目录中的每个文件执行的。

如果有人遇到同样的问题,我希望这能派上用场!

import os
import shutil



for wav in os.listdir('C:/../modified'):
    modified_file = 'C:/../modified/' + wav



    for root, dirs, files in os.walk('C:/../original'):
        for name in files:
            if name == wav:
                original_file = root + '/' + name
                original_file = replace_file.replace('\\','/')

                shutil.copyfile(modified_file, original_file)
                print wav + ' overwritten'




print 'Complete'

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2013-07-02
    • 1970-01-01
    • 2011-09-09
    • 2015-03-29
    • 2011-07-19
    • 1970-01-01
    • 2011-04-24
    • 2019-07-25
    相关资源
    最近更新 更多