创建文件夹及其中的文件夹的副本,同时更改其名称

时间:2014-03-31 22:20:12

标签: python python-3.x os.path

我正在尝试为我正在文件夹中的每个文件上运行的批处理脚本创建输出文件夹/文件。我想如果当我在targetFolder中找到所有文件或文件夹时我可以创建一个targetFolder_output,并且如果targetFolder有一个文件夹,另一个文件夹,我可以在targetFolder_out中创建另一个文件输出。

所以最后我有C:\ targetFolder \ anotherFolder并且它是重复的C:\ targetFolder_output \ anotherFolder_output

我打算用其中的所有文件执行此操作,但我认为如果我可以克服此文件夹的障碍,我可以处理该文件。

import os

targetFolder = "C:\\Users\\MyUserName\\Desktop\\tests"
outputFolder = targetFolder + "_output"

# Iterate over everything in the targetFolder
for directory, subdirectories, files in os.walk(targetFolder): 
    folderBasename = (os.path.basename(directory) )

    if not os.path.exists(outputFolder + "\\" + folderBasename + "_output"):
        os.makedirs(outputFolder + "\\" + folderBasename + "_output")

到目前为止,所有这一切都是在桌面上使用文件夹“tests_output”创建一个文件夹:
tests_output \ tests_output
tests_output \ level2_output
tests_output \ level3_output

我希望看到的是:
tests_output \ level2_output \ level3_output

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

import os
class FCopy(object):
    def __init__(self, source):
        self.source = source
        self.target = os.path.join(source, '_output')
        if not os.path.exists(self.target):
            os.makedirs(os.path.abspath(self.target))
        self.lf, self.ld = [], []

    def walk(self, path):
        for x in (os.path.join(path, x) for x in os.listdir(path)):
            if x == self.target:continue
            if os.path.isfile(x):
                self.lf.append(x)
            elif os.path.isdir(x):
                self.ld.append(x)
                self.walk(x)
            #extra code if you want to handle symlinks

    def do(self):
        #if thats all you want,
        #code this directly in walk
        self.walk(self.source)

        for x in self.ld:
            x = x.replace(self.source, self.target)
            os.makedirs(x)
        for x in self.lf:
            x = x.replace(self.source, self.target)
            with open(x, 'w') as f:pass

f = FCopy('C:\\PerfLogs\\w\\tmp\\codemirror')
f.do()

你可以玩ifexists等等。 如果您想要的只是源的结构的两倍,那么您可以在walk中移动文件/ dirs的创建,相应的if ... else P.S。:不理我的主意,我只是在里面做一个测试

相关问题